多线程
1.线程(Thread)
(1)概念:系统调度资源的最小单位。
进程和线程的区别:
- 进程:系统分配资源的最小单位;
- 线程:系统调度资源的最小单位;
- 线程是进程执行的最小单位,也是进程执行的实际单位。
- 一个进程中最少包含一个线程;线程必须依附在进程当中。
- 举例:进程就相当于一个工厂,线程就相当于一个一个流水线。
- 进程不可以共享资源,而线程可以共享资源;
(2)线程可共享的资源:
- 打开的文件;
- 内存(对象);
(3)线程不可共享的资源:
- 上下文;
- 记账;
- 状态信息;
- 栈信息;
(4)线程(增加运行速度,提高性能)的数量并不是越多越好;
当线程的数量达到某个合适的值是最好的;如果有太多的线程,就会出现线程之间的争抢和CPU的过度调度问题,而且CPU的调度是需要消耗系统资源的,所以线程不是越多越好。
那多少线程是最好的?
需要看具体的应用场景,密集计算的 CPU任务 IO(文件读写)型任务;
当使用的场景是计算型任务时,线程的数量 == CPU的数量 时是最好的;
当使用场景是IO型任务时,理论上线程数量越多越好;
(5)并发编程:
进程——> 线程(轻量级的进程) ——>协程(轻量级的线程)
(6)线程的分类:
- 后台线程——守护线程
- 用户线程——默认线程
守护线程(isDaemon(true)):用来服务用户线程的;
进程退出:没有用户线程运行,进程就会结束;
守护线程的使用场景:Java 垃圾回收器;
守护线程的注意事项:守护线程设置必须在调用start()之前;
在守护线程里面创建的线程,默认情况下全部都是守护线程;