线程锁和同步异步相关问题整理
锁
什么是线程同步?
排队机制
什么是线程异步?
多个线程使用同一个资源,抢占资源
同步和异步的区别:
1.同步最安全,效率低
2.异步效率高,但是容易造成死锁
造成死锁的原因:
1.两个或两个以上的线程在执行的过程中,因争夺资源而造成的一种互相等待资源,最后造成死锁的现象。
死锁的条件:
1.互斥条件
2.请求和保持条件
3.不可剥夺条件
4.循环等待条件
如何避免死锁?
1.加锁顺序
2.加锁时限
3.加锁检测
如何实现线程同步?
1.通过synchronized关键字,来实现同步,
2.使用wait()与notify()或者notifyAll()
3.Lock重入锁
4.volatitle关键字—特殊域变量
5.使用局部变量—ThreadLocal
synchronized和Lock的区别:
synchronized:
1.synchronized锁是使用Object类本身提供的wait,notify,notifyAll方法的调度机制
2.synchronized可以用在方法上和代码块上,而括号中要放需要表示的锁对象(常用this表示)
3.synchronized是JVM执行的
4.synchronized会自动释放锁
5.synchronized是java内置的关键词
6.无法判断锁状态Lock
1.Lock锁是使用condition包进行线程之间的调度
2.Lock锁需要指定起止位置。
3.Lock是通过代码实现的
4.Lock需要手动释放
5.Lock是接口
6.可以判断锁状态