Java 多线程 知识解析(二)
1,线程通信
账户有钱——取款,不存钱
账户没钱——存款,不取钱
2,线程组和未处理的异常
3,线程池
ExecutorService 表尽快执行线程的线程池(只要线程池中有空闲线程,就 即执行线程任务) ,
程序只要将 Runnable 对象或 Callable 象( 表线程任务)提交给该线程池 该线程池就会尽快
执行该任务 ExecutorService 里提供了如下 方法
ScheduledExecutorService 迟后或周期性地执行线程任务 线程池, 提供了如下个方法:
关闭线程池
public class ThreadPoolTest {
public static void main(String[] args)throws Exception {
// 创建一个具有固定线程数为6的线程池
ExecutorService pool = Executors.newFixedThreadPool(6);
// 重写run方法
Runnable target = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10 ; i++ )
{
System.out.println(Thread.currentThread().getName());
}
}
};
// 向池中提交2个线程
pool.submit(target);
pool.submit(target);
// 关闭线程
pool.shutdown();
}
}
示例:
for (int j = 0; j < listbzinfo.size(); j++) {
final Map<String, Object> stringObjectMap = listbzinfo.get(j);
//向线程池中提交Callable对象,并重写执行体,并返回结果集
Future<String> stringFuture = Public.SCHEDULEDTHREADPOOLEXECUTOR.submit(new Callable<String>() {
@Override
public String call() throws Exception {
String sqlList= "*******";
String bzsum = jdbcTemplate.queryForObject(sqlList, String.class);
return bzsum;
}
});
//获取线程池中的返回值
hashMap.put(stringObjectMap.get("bzcode").toString(),stringFuture);
}
