位置:首页 > 后端 > java

Java多线程(3)多线程同步

chenlong 发布:2021-08-28 21:45:51阅读:

1、多线程同步的实现方法有哪些

1.synchronized关键字

(1)synchronized方法

(2)synchronized代码块

2.volatile关键字

3.Lock

2、多线程同步synchronized与Lock有什么异同

2.1. synchronized

存在层次: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(不建议使用)

24人点赞 返回栏目 提问 分享一波

小礼物走一波,支持作者

还没有人赞赏,支持一波吧

留言(问题紧急可添加微信 xxl18963067593) 评论仅代表网友个人 留言列表

暂无留言,快来抢沙发吧!

本刊热文
网友在读
手机扫码查看 手机扫码查看