死锁产生的条件
- 互斥
线程对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个线程所占有。
此时若有其他线程请求该资源,则请求线程只能阻塞等待。
线程安全问题都是由全局变量及静态变量引起的。
JVM运行时数据区包括了程序计数器,本地方法栈,jvm栈,堆。在这四个区中,前三个都是线程间隔离的。
只有堆内存是线程间共享的。而全局变量放在堆内存中,各线程内jvm栈只保存了对象引用,所以各线程更改的还是一个
内存地址的数据。
当有一个单例类中有实例变量,而业务逻辑又要对变量进行处理,当有多个线程同时操作时,如果没有给处理代码加上锁,就有可能出现线程安全问题。如:我们最常见的获取JDBC连接的
连接,还有我们交给Spring容器管理的类等
tar -zxvf apache-maven-3.5.3-bin.tar.gz
tar -zxvf jdk-8u152-linux-x64.tar.gz