ExecutorService是Java并发包里面的一个线程池服务
线程池的优点
- 复用已有的线程,消除任务中创建线程的开销
- 通过优化线程的数量,提高性能,保证处理器一直处于忙的状态,而不必创建这么多的线程,使程序耗尽资源
首先可以带着以下观点一步一步看,之所以划掉是因为第二条理论不成立...
在18.4.2的练习中,我发现用Thread对象来执行一个线程和线程池管理执行线程的一个有趣的特点:
- Thread对象是自发销毁的,或由GC或由什么玩意儿,自发的回收线程对象(当线程中的任务执行完成时)。
- ExecutorService,用线程池来管理线程的话,得注意shutdown掉线程池,因为即使线程池中的线程对象执行完自身任务之后,依然处于running状态,他们已经"身不由己"了;并且,当主线程已经执行完,我们并没有手动关闭线程池的话,ExecutorService依然存在,里面的线程对象,还有线程池对象,甚至还多出一个destroyVM的执行线程都会一直running,这是很可怕的...
用Thread对象来执行线程:
使用线程池(ExecutorService)来管理线程:
嗯。。我的生产消费者还没写呢。。同学叫撸了。。尼玛。。我是个败类。。匿了。。