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

1、通过volatile关键字修饰变量,可以实现线程之间的可见性,避免变量脏读的出现,底层是通过限制jvm指令的重新排序实现的,适用于一个线程修改,多个线程读的场景。

2、通过synchronized锁(任意对象)来实现线程同步,自动锁的思想,底层实现原理:当又线程进入同步代码快之后,利用jvm的计数器将锁的标记位置为1,当别的线程再想进入的时候,发现锁的标记为1,该线程就去锁池等待,当第一个线程出来之后,锁的标记会置为0,之后cpu会随机分配一个线程再次进入同步代码块

3、通过Lock锁的机制,进行手动lock和unlock,但是这种很容易出现死锁。注意加锁一级解锁的顺序,就可以避免死锁。

4、通过使用线程安全的集合类,就可以解决并发问题,如:

ConcurrentHashMap、CopyonWriteArrayList等。

5、使用并发包下面的原子类,底层使用CAS机制(乐观锁),可以解决并发问题,如atomiclnteger线程安全的原子类。

6、使用线程池来创建和管理线程,也可以一定程度上解决并发问题

7、使用ThreadLocal来修饰变量,可以解决并发问题

你可能感兴趣的:(java)