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);
     }
经验分享 程序员 微信小程序 职场和发展