廖雪峰Java11多线程编程-3高级concurrent包-1ReentrantLock

2020-12-13 01:43

阅读:402

标签:out   except   替代   ``   system   class   current   port   nal   

线程同步:

  • 是因为多线程读写竞争资源需要同步
  • Java语言提供了synchronized/wait/notify
  • 编写多线程同步很困难

所以Java提供了java.util.concurrent包:

  • 更高级的同步功能
  • 简化多线程程序的编写
  • JDK>= 1.5

java.util.locks.ReetrantLock用于替代synchronized加锁
```#java
synchronized(lockObj){
n = n + 1;
}

final Lock lock = new ReetrantLock()
lock.lock()
try{
n = n + 1;
}finally{
lock.unlock();
}

import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.Lock;

class Counter{
    private Lock lock = new ReentrantLock();
    private int value = 0;
    public void add(int m){
        lock.lock();
        try{
            value += m;
        }finally {
            lock.unlock();
        }
    }
    public void dec(int m){
        lock.lock();
        try{
            value -= m;
        }finally {
            lock.unlock();
        }
    }
    public int get(){
        lock.lock();
        try{
            return this.value;
        }finally {
            lock.unlock();
        }
    }
}
public class Main{
    final static int LOOP = 100;
    public static void main(String[] args) throws Exception{
        Counter counter = new Counter();
        Thread t1 = new Thread(){
            public void run(){
                for(int i=0;i

tryLock()可指定超时
总结:
ReentrantLock可以替代synchronized
ReentrantLock获取锁更安全
获取锁在try...finally之前
必须使用try... finallu保证正确释放锁

廖雪峰Java11多线程编程-3高级concurrent包-1ReentrantLock

标签:out   except   替代   ``   system   class   current   port   nal   

原文地址:https://www.cnblogs.com/csj2018/p/11007060.html


评论


亲,登录后才可以留言!