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();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容