多线程问题的解决思路

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

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

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

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

  (2)、使用可重入锁reentrantlock

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

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

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

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

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

posted @ 2017-12-18 11:37  kernel_y  阅读(1397)  评论(0编辑  收藏  举报