多线程并发或线程安全问题如何解决?

1:通过volatile 关键字修饰变量,可以实现线程之间的可见性,
避免变量脏读的出现,底层是通过限制jvm指令的重排序来实现的
适用于一个线程修改,多个线程读的场景
2:通过synchronized锁(任意对象)来实现线程同步,自动锁的思想,
底层实现原理:当有线程进入同步代码块之后,利用jvm的计数器将
锁的标记置为1,当别的线程再想进入的时候,发现锁的标记为1,
该线程就去锁池等待,当第一个线程出来之后,锁的标记会置为0,
之后cpu会随机分配一个线程再次进入同步代码块.
3:通过lock锁的机制,进行手动lock,和unlock,但是这种很容易出现死锁。
注意加锁以及解锁的顺序,就可以避免死锁

4:通过线程安全的集合类,可以解决并发问题4
ConcurrentHashMap
CopyonWriteArrayList
5:使用并发包下面的原子类,底层使用的是cas机制(乐观锁),可以解决并发问题 atomicInteger 线程安全的原子整型类
6:使用线程池来创建和管理线程,也可以一定程度上解决并发问题
7:使用ThreadLocal来修饰变量,可以解决并发问题
ThreadLocal底层是怎么实现的?
多个线程会复制一份threadLocao变量的副本进行操作,互不影响,来保证线程安全的

猜你喜欢

转载自blog.csdn.net/he19970408/article/details/107692373