多线程问题的解决思路

多线程问题的解决思路一般分为以下几个部分(适用情况的区别)

1、最常用的解决办法是使用线程同步,使得一个共享变量在同一时间只能被一个线程访问。这样可以有效避免变量被多个线程访问的时候出现的数据不一致问题。但是当线程比较多,竞争比较激烈的时候多个线程排队等待同一个资源会导致效率的下降,并且有可能导致死锁的发生。

  (1)、使用synchronized进行加锁。

    这是在JVM层面进行的实现,当出现异常的时候,JVM会自动释放锁。同时可以通过监测工具对锁的状态进行监控。但是当竞争比较激烈的时候会出现性能的快速下降。

  (2)、使用可重入锁reentrantlock

    在代码层面实现的同步锁。通过lock()和unlock()可以自由控制加锁和释放锁,并且必须要手动释放锁。使用的时候可以使用tryLock()来控制等待锁的时间,如果超时,线程放弃等待可以先去做其它事情。

  (3)、使用同步变量Atomic类

    JDK1.5在java.util.concurrent中新加入的类。

2、为了提高效率,又要保证读写操作的同步。可以使每个线程都有一个自己的本地变量。这样每个线程独立操作自己的变量,就避免了多个线程同时修改一个变量出现的不一致问题。

  (1)、使用ThreadLocal保证每个线程都有一个共享变量的副本

转载于:https://www.cnblogs.com/coderjie/p/8056769.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值