Java实现线程安全的方式
多线程环境中如何保证线程安全?java可以实现线程安全的方式归纳如下:
1、使用synchronized关键字
synchronized关键字可以修饰方法和代码块,它的语义是保证同一段代码同一时间只能有一个线程在执行。
2、使用volatile关键字
volatile关键字用来修饰共享变量。它的语义是保证被修饰的变量在被一个线程修改后,都会通知其他线程,其他线程需要操作该变量时会重新获取,这样每个线程在操作该共享变量时获取到的值都是很新的,但是volatile关键字无法保证原子性,怎么来理解这句话呢?在你写的对该变量操作的一行代码,在执行时是拆分成多条字节码指令后执行的,所以对volatile修饰的变量操作时,需要保证该操作具有原子性。有些操作本身就具有原子性,无需额外编码,比如:volatile修饰boolean类型的变量,对该变量的操作是赋值操作。对于不具备原子性的操作,则需要使用某些方法来保证原子性,比如:使用原子类来替代基本数据类型
3、使用原子类代替基本数据类型
java提供三种类型的原子类,当某个操作因为不是原子操作导致的线程安全问题的时候,可以使用原子类来替代。比如:多线程环境下执行a++,可以使用AtomicInteger类incrementAndGet()方法实现。相比synchronized,原子类是使用乐观锁来实现线程安全,synchronized使用悲观锁来实现线程安全。
相关推荐
杨树 2020-09-21
zhuyonge 2020-08-01
fraternityjava 2020-06-26
三动 2020-06-21
zhuyonge 2020-07-26
网络菜市场 2020-05-11
网络菜市场 2020-04-25
亦碎流年 2020-03-04
yutian0 2020-10-26
Hy 2020-11-13
xrslt 2020-11-06
xiaoemo0 2020-07-18
luohui 2020-06-26
dxyadc 2020-06-26
luohui 2020-06-21
fengyun 2020-06-14
fraternityjava 2020-06-14
waitui00 2020-06-14