• 技术文章 >Java >java教程

    java中实现线程安全的方式有哪些

    王林王林2019-11-27 14:55:05转载3578

    要实现线程安全一般至少需要两个特性:原子性可见性。

    实现方式:

    1)使用synchronize:它本具有原子性和可见性的,所以如果使用了synchronize修饰的操作,那么就自带了可见性,synchronized使用悲观锁来实现线程安全;

    2)使用原子类代替基本数据类型,原子类是使用乐观锁来实现线程安全,多线程环境下执行a++,可以使用AtomicIntegerincrementAndGet()方法实现,同样是使用了volatile来保证可见性;使用Unsafe调用native本地方法CAS,CAS采用总线加锁或缓存加锁方式来保证原子性;

    在线视频教程推荐:java视频教程

    3 ) 使用volatile关键字,volatile不一定就有原子性,比如用volatile修饰的变量进行++或者--操作(num++),我们需要让volatile修饰的变量需要具有原子性,那么我们一般可以设置在boolean类型变量上,如下:

    volatile boolean tag = true;
    线程1 while(tag){};
    线程2 while(tag){};

    如果有变量自增或者自减,我们可以使用原子类(AtomicInteger)。

    4)使用ThreadLocal对各个线程进行隔离;

    5)我们还可以用其他的锁,比如重入锁(ReentrantLock) 保证线程安全;

    6)我们还可以用 临界区、互斥量、信号量 保证线程安全。

    本篇文章由java入门学习栏目为大家推荐,欢迎大家来共同学习交流。

    以上就是java中实现线程安全的方式有哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:java 线程安全 实现
    上一篇:深入了解java中的string对象 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • java中抽象类与普通类、接口的区别分别是什么• java泛型详细介绍• java中如何计算最小公倍数• 深入了解java中的string对象
    1/1

    PHP中文网