Java多线程(3)多线程同步
chenlong 发布:2021-08-28 21:45:51阅读:1、多线程同步的实现方法有哪些
1.synchronized关键字
(1)synchronized方法
(2)synchronized代码块
2.volatile关键字
3.Lock
2、多线程同步synchronized与Lock有什么异同
存在层次:Java的关键字,在jvm层面上
锁的释放:
(1)以获取锁的线程执行完同步代码,释放锁
(2)线程执行发生异常,jvm会让线程释放锁
锁的获取:假设A线程获得锁,B线程等待。如果A线程阻塞,B线程会一直等待
锁状态:无法判断
锁类型:可重入 不可中断 非公平
性能:少量同步
2.2.Lock
存在层次:是一个类(还多了锁投票、定时锁、等候和中断锁等)
锁的释放:在finally中必须释放锁,不然容易造成线程死锁
锁的获取:分情况而定,Lock有多个锁获取的方式,具体下面会说道,大致就是可以尝试获得锁,线程可以不用一直等待
锁状态:可以判断
锁类型:可重入 可判断 可公平(两者皆可)
性能:大量同步
2.3.volatile
(1)volatile关键字为域变量的访问提供了一种免锁机制
(2)使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
(3)因此每次使用该域就要重新计算,而不是使用寄存器中的值
(4)volatile不会提供任何原子操作,它也不能用来修饰final类型的变量,因此volatile不能代替synchronized(不建议使用)
小礼物走一波,支持作者
赏还没有人赞赏,支持一波吧