Thread/Runable/Callable:多线程的三个实现方式
适用场景:多线程编程
优点:Callable 的call方法有返回值,Runable/Callable为接口,能多实现
缺点:Thread为抽象类,只能单继承
Thread.sleep(millis)/Object.wait()/Object.notify()/Object.notifyAll()/Object.join()/Condition.await()/Condition.signal()/
Condiction.signalAll():
适用场景:涉及到线程通讯问题的场景
ExecutorService:能创建自定义条件的线程池
优点:能很好的管理线程的生命周期,不需要付出频繁创建和销毁线程的代价
缺点:
适用场景:
1.ExecutorService.newFixedThreadPool(nThreads):
(1)总是维护固定数量的核心线程数(即活动线程数总是和最大线程数一致),哪怕都没有任务需要执行。 (2)没有所谓的非空闲时间,即keepAliveTime为0。即线程一闲下来就会被马上回收 (3)阻塞队列为无界队列LinkedBlockingQueue。 使用场景:FixedThreadPool 应该尽可能的少的分配线程。适用执行周期较长,但是提交频率较低的任务。因为如果提交频率太高,会导致过多的任务被放到队列中,导致OOM。
2.ExecutorSe