JUC并发编程第一篇,复习线程基础知识
- 一、为什么多线程极其重要?
- 二、从start一个线程开始认识多线程
- 三、进程、线程和管程
- 四、用户线程和守护线程
一、为什么多线程极其重要?
- 硬件方面:摩尔定律失效
摩尔定律
价格不变时,集成电路上可容纳的元器件的数目约每隔18-24个月便会增加一倍,性能也将提升一倍。
摩尔定律失效
从2003年开始CPU主频已经不再翻倍,而是采用多核而不是更快的主频。
在主频不再提高且核数在不断增加的情况下,要想让程序更快就要用到并行或并发编程。
- 软件方面:
高并发系统,异步+回调等生产需求
二、从start一个线程开始认识多线程
对于线程的使用,大家再熟悉不过了,最简单的就是new一个线程,调用它的 start() 方法,这个线程就启动了。但是它到底是怎么做到的呢?可以点进去源码看一下:
- 当我们 start() 一个线程的时候,其实是调用了 Thread.java 类里边的 private native void start0();
- 但是到这就结束了吗?其实并没有,Java语言底层是C++语言写的,所以想要继续往下看,可以到官网下载 OpenJDK源码(http://openjdk.java.net/)
- Openjdk的写JNI一般是一一对应的,Thread.java对应的就是Thread.c
- 最后可以看到,操作线程其实是对操作系统的调用。
三、进程、线程和管程
进程:是操作系统资源分配的最小单元,是操作系统对一个正在运行的程序的一种抽象,每⼀个进程都有它⾃⼰的内存空间和系统资源
线程:是操作系统能够进行运算调度的最小单元,⼀个进程会有1个或多个线程。
管程:Monitor(监视器),就是我们平时所说的锁。Monitor其实是一种同步机制,他的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码。
四、用户线程和守护线程
线程的daemon属性为true表示是守护线程,false表示是用户线程
守护线程:是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程
用户线程:是系统的工作线程
注意:当程序中所有用户线程执行完毕之后,不管守护线程是否结束,系统都会自动退出
设置守护线程,需要在start()方法之前进行