如何保证线程安全

1|01.无状态

没有公共资源,线程一定安全

2|02.不可变

公共资源不可变,线程一定安全

 

 

3|0 3.无修改权限

不提供修改入口,属性私有

 

 

4|0 4.synchronized同步机制

同步方法和同步代码块,优先使用同步代码块,因为粒度小

5|05.Lock接口实现类ReentrantLock

显示锁ReentrantLock包含了公平锁、非公平锁、可重入锁、读写锁,使用时要在finally里手动释放

6|06.分布式锁

对于synchronized和lock对于单个节点可以保证线程安全,但是不同节点的分布式环境无法保证,这时可以使用分布式锁

比如:数据库分布式锁、zookeeper分布式锁、redis分布式锁 

 

7|0 7.volatile

如果只要求多个线程之间的可见性,比如只是控制某个功能的开关,那么使用volatile就可以

public class VolatileTest { volatile boolean flag = true; public void updateFlag() { this.flag = false; System.out.println("修改flag值为:" + this.flag); } public static void main(String[] args) { VolatileTest test = new VolatileTest(); new Thread(() -> { while (test.flag) { } System.out.println(Thread.currentThread().getName() + "结束"); }, "Thread1").start(); new Thread(() -> { try { Thread.sleep(2000); test.updateFlag(); } catch (InterruptedException e) { } }, "Thread2").start(); } }

8|08.ThreadLocal

9|09.线程安全集合

CopyOnWriteArrayList、ConCurrentHashMap、CopyOnWriteArraySet、ArrayBlockingQueue等等

10|010.CAS机制JDK

11|011.做数据隔离

比如对于同一用户处理使用单个线程,不存在多个线程对同一用户进行处理

__EOF__

本文作者blanset
本文链接https://www.cnblogs.com/blanset/p/16800164.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   求道之愚者  阅读(425)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示