jdk5对锁的升级

我们之前使用synchronized来实现同步,现在导包 java.util.concurrent.locks,就可以完成同步。不过需要获取锁,释放锁。同步的内容要写进try里。
开始写这段代码时,我将Lock l = new ReentrantLock(); // 创建锁对象写到run方法里了,这就导致每当线程开始跑时就会创建一个锁对象,就会通过新的锁来实现线程,那么就实现不了同步。

import java.util.concurrent.locks.*;

class Xian implements Runnable {
    int num = 10000;
    Lock l = new ReentrantLock(); // 创建锁对象

    public void run() {
        while (true) {
            l.lock();// 获取锁
            try {
                if (num > 0) {
                    System.out.println(Thread.currentThread().getName() + "---" + num);
                    num--;
                }
            } finally {
                l.unlock();// 释放锁
            }
        }
    }
}

class Demo1 {
    public static void main(String[] args) {
        Xian x = new Xian();
        Thread t = new Thread(x);
        Thread t2 = new Thread(x);
        t.start();
        t2.start();
    }
}

你可能感兴趣的:(jdk5对锁的升级)