1.什么是线程安全问题
当多个线程共享同一全局变量,做写的时候,可能会受到其他线程的干扰,导致数据有问题。
2.线程如何如何同步() 保证数据的原子性
synchroized-自动挡
lock-jdk1.5并发包-手动挡
3.什么地方加锁synchroized
真正共享数据的时候
4.有一个线程已经拿到了锁,其他线程已经有cpu执行权限,一直排队,等待其他线程释放锁。
锁是在代码执行完毕或者抛出异常释放。
5.同步的缺点:效率低,锁的资源竞争。
6.锁一直不释放的时候:死锁
7.同步函数使用的是 this锁
一个代码块使用同步函数,另一个函数使用this锁,可实现同步。非this锁不能同步
8.静态同步函数使用的是不是this锁,是当前类的字节码文件.class
9.多线程死锁现象 同步中嵌套同步,互相不释放
例:线程1 先拿a锁,在拿b锁
线程2 先拿b锁,在拿a锁
*****10.java内存模型(JMM)
多线程三大特性:
原子性:独一无二,一致性,保证线程安全性
可见性:java内存模型
有序性:join(),wait(),notify()
11.什么是java内存模型?
java内存结构和内存模型不是一回事
内存结构---jvm内存分配
内存模型---jmm--多线程可见性
java内存模型决定了一个线程与另一个线程是否可见
主内存(主要存放共享全局变量)和私有本地内存(本地线程私有变量 )
12.Volatile关键字:强制刷新主内存,不保证原子性
13.原子类:保证原子性,保证安全性
14.什么是ThreadLock
为每一个线程提供一个局部变量