线程基础知识复习
1、线程基础知识复习

1.1 Doug Lea(道格.利)

1.2 java.util.concurrent在并发编程中使用的工具包

1.3 摩尔定律失效
- 摩尔定律:它是由英特尔创始人之一Gordon Moore(戈登·摩尔)提出来的。其内容为:
当价格不变时,集成电路上可容纳的元器件的数目约每隔18-24个月便会增加一倍,性能也将提升一倍。 换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度。 - 可是从2003年开始CPU主频已经不再翻倍,而是采用多核而不是更快的主频。摩尔定律失效了,在主频不再提高且核数在不断增加的情况下,要想让程序更快就要用到并行或并发编程。
1.4 Thread.c
java线程是通过start的方法启动执行的,主要内容在native方法start0中,openjdk的写JNI一般是一一对应的,Thread.java对应的就是Thread.c。start0其实就是JVM_StartThread。此时查看源代码可以看到在jvm.h中找到了声明,jvm.cpp中有实现。
1.5 jvm.cpp


1.6 thread.cpp

1.7 并发 vs 并行

1.8 Monitor(监视器)
Monitor其实是一种同步机制,他的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码。
JVM中同步是基于进入和退出监视器对象(Monitor,管程对象)来实现的,每个对象实例都会有一个Monitor对象,Monitor对象会和Java对象一同创建并销毁,它底层是由C++语言来实现的。
1
2
3
4
5new Thread(()->{
synchronized (o){
}
},"t1").start();
1.9 JVM第3版

1.10 源码解读

1.11 code演示
1 | public class DaemonDemo { |
1.12 why?
setDaemon(true)方法必须在start()之前设置,否则报llegalThreadStateException异常。你不能把正在运行的常规线程设置为守护线程。