首页 > 代码库 > Java多线程笔记
Java多线程笔记
1.并发通常可以提高单处理器上程序的性能
其实,在单处理器上并发的执行程序锁用的开销大于顺序执行。然而顺序执行时,程序有时会因为某些条件(通常是I/O问题)导致不能继续执行,称为线程阻塞,如果没有并发,程序将停止不前。而使用了并发,一个任务阻塞,其他任务还可以继续执行,这就保证了程序的完成。所以,如果确定没有任务会出现阻塞,在单处理器上并发执行程序是不必要的。
2.并发在单处理器上性能提高最常见的实例是--事件驱动的编程
并发最吸引人的额就是可以产生可响应的用户界面,比如某个程序将长期的运行某个操作,但是又要随时处理用户的输入,如果在这个长期任务的每一段都加入一个处理用户输入的程序,那是十分不明智的,而创建单独的线程来处理用户输入就是非常棒的实现
3.操作系统会隔离进程,但Java却不行,所以,Java多线程最困难的就是协调多个线程对同一块资源的访问,确保资源不会同时被多个线程访问。
4.四中线程池的区别(newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor )
new Thread()创建线程这种方式有很多弊端:a.每次new Thread新建对象性能差。b.线程缺乏统一管理,可能无限制新建线程,相互之间竞争,占用过多资源导致死机。c.缺乏更多功能,如定时执行,定期执行,线程中断。
newCachedThreadPool:创建一个可缓存的线程池,如果线程长度超过处理需要,可灵活的回收空闲线程,若没有可回收的就新建线程(首选)
newFixedThreadPool:定长线程池,可控制线程的最大并发数,超出的线程按队列等候
newScheduledThreadPool:定时线程池,支持定时及周期性任务执行
newSingleThreadExecutor :单一线程池,只会用唯一的线程来执行工作,所有任务按照FIFO来执行
Java多线程笔记