了解线程池

/**
 *  Executor: 线程池接口的根类。   void execute(Runnable command); 执行任务方法。
 *     ExecutorService: 线程池根类下的子接口。
 *         shutdown():关闭线程池,如果线程池中还有为执行完的任务则需要等待任务执行完毕后在关闭。
 *         shutdownNow():立即关闭。
 *         isShutdown(): 是否关闭
 *         isTerminated():是否终结
 *         submit(): 提交任务给线程
 *  Executors: 线程池的一个工具类。 可以帮你创建线程池对象,
 *
public class Test {
    public static void main(String[] args) {
          //创建一个固定长度的线程池。
//          ExecutorService executorService = Executors.newFixedThreadPool(3);
          //创建一个可扩容的线程池
//        ExecutorService executorService = Executors.newCachedThreadPool();
         //创建单一线程池  任务队列。
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        //提交任务给线程池,线程池会给该任务分配线程对象。
        for(int i=0;i<2;i++) {
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < 10; i++) {
                        System.out.println(Thread.currentThread().getName() + "~~~~~~" + i);
                    }
                }
            });
        }
        executorService.shutdown();

    }
}
public class Test02 {
    public static void main(String[] args) {
        //因为实现类的参数个数非常多。所以使用工具类来创建线程池。
        // 习惯用实现类。更加灵魂。
//           int corePoolSize, 核心的个数初始化的个数。
//        int maximumPoolSize, 最大的个数
//        long keepAliveTime,  保持活跃的时间。
//         TimeUnit unit, 单位
//        BlockingQueue<Runnable> workQueue: 堵塞队列。

        BlockingQueue<Runnable> workQueue=new ArrayBlockingQueue(10);
        ExecutorService executorService=new ThreadPoolExecutor
                (2,5,10,TimeUnit.SECONDS,workQueue);

        for (int i = 0; i <15 ; i++) {
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    for (int j = 0; j <20 ; j++) {
                        System.out.println(Thread.currentThread().getName()+"~~~~~~~~"+j);
                    }
                }
            });
        }

        executorService.shutdown();
    }
}
public class Test {
//    public static void main(String[] args) throws Exception{
//         MyCallable myCallable=new MyCallable();//创建任务对象
//         FutureTask futureTask=new FutureTask(myCallable); //任务对象
//         Thread t=new Thread(futureTask);
//         t.start();
//
//         //获取任务执行的结果时,他会等待任务执行完毕后在输出
//        System.out.println(futureTask.get());//获取任务执行的结果
//        //思考:这种实现执行callable任务的代码复杂。 callable任务习惯和线程池一起使用。
//    }
public static void main(String[] args) throws Exception {
    ExecutorService executorService = Executors.newFixedThreadPool(2);
    MyCallable myCallable=new MyCallable();//创建任务对象
    Future<Integer> future = executorService.submit(myCallable);
    //submit可以提交callable类型的任务也可以提交runnable类型的任务;
    //返回Future对象,该对象就是把任务执行的结果封装为Future类对象。
    System.out.println(future.get());
}
}
//通过线程完成1~100的和
class MyCallable implements Callable<Integer>{

    public int sum=0;
    @Override
    public Integer call() throws Exception {
        for (int i = 0; i <101 ; i++) {
            Thread.sleep(100);
            sum+=i;
        }
        return sum;
    }
}
class MyRunnable implements  Runnable{

    @Override
    public void run() {

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值