JAVA锁:重入锁

重入锁

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized(重量级) 和 ReentrantLock(轻量级)等等 ) 。
这些已经写好提供的锁为我们开发提供了便利。

重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。

在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁

synchronized 测试可重入锁:


public class Test implements Runnable {

    public synchronized void get(){
        System.out.println("name:"+Thread.currentThread().getName()+"get();");
        set();
    }

    private synchronized void set() {
        System.out.println("name:"+Thread.currentThread().getName()+"set();");
    }

    @Override
    public void run() {
        get();
    }

    public static void main(String[] args) {
        Test ss = new Test();
        new Thread(ss).start();
        new Thread(ss).start();
        new Thread(ss).start();
        new Thread(ss).start();
    }
}

JAVA锁:重入锁_第1张图片
ReentrantLock 测试重入锁:

public class Test02 extends Thread {
    ReentrantLock lock = new ReentrantLock();
    public void get(){
        lock.lock();
        System.out.println(Thread.currentThread().getId());
        set();
        lock.unlock();
    }

    private void set() {
        lock.lock();
        System.out.println(Thread.currentThread().getId());
        lock.unlock();
    }

    @Override
    public void run() {
        get();
    }

    public static void main(String[] args) {
        Test ss = new Test();
        new Thread(ss).start();
        new Thread(ss).start();
        new Thread(ss).start();
    }
}

JAVA锁:重入锁_第2张图片

你可能感兴趣的:(多线程)