您的位置:首页 > 编程语言 > Java开发

Java多线程知识点总结——进阶篇(八) 之 等待唤醒机制 Lock 锁升级版

2018-03-31 16:14 375 查看
JDK1.5 中提供了多线程升级解决方案。

将同步 Synchronized 替换成现实 Lock 操作。

将Object中的 wait、notify、notifyAll,替换成了Condition 对象。该对象可以对 Lock 锁进行获取。该示例中,实现了本方只唤醒对方操作

Lock: 替代了 Synchronized,关键API有:

lock ()

unlock()

newCondition()

Condition:替代了Object wait notify notifyAll,关键API有:

await()

signal()

signalAll()

上一篇文章的代码通过 Lock 锁进行升级,升级后的代码如下:

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

class ProducerConsumerDemo2 {
public static void main(String[] args) {
Resource r = new Resource();

Producer pro = new Producer(r);
Consumer con = new Consumer(r);

new Thread(pro).start();
new Thread(pro).start();
new Thread(con).start();
new Thread(con).start();

}
}

class Resource {
private String name;
private int count = 1;
private boolean flag = false;
private Lock lock = new ReentrantLock();

private Condition condition_pro = lock.newCondition();
private Condition condition_con = lock.newCondition();

public void set(String name) throws InterruptedException {
lock.lock();
try {
while (flag)
condition_pro.await();
this.name = name + "--" + count++;

System.out.println(Thread.currentThread().getName() + "...生产者.."
+ this.name);
flag = true;
condition_con.signal();//只唤醒 producer 的线程
} finally {
lock.unlock();//释放锁的动作一定要执行。
}
}

public void out() throws InterruptedException {
lock.lock();
try {
while (!flag)
condition_con.await();
System.out.println(Thread.currentThread().getName() + "...消费者........." + this.name);
flag = false;
condition_pro.signal();//只唤醒 Consumer 的线程
} finally {
lock.unlock();//释放锁的动作一定要执行。
}

}
}

class Producer implements Runnable {
private Resource res;

Producer(Resource res) {
this.res = res;
}

public void run() {
while (true) {
try {
res.set("+商品+");
} catch (InterruptedException e) {
}

}
}
}

class Consumer implements Runnable {
private Resource res;

Consumer(Resource res) {
this.res = res;
}

public void run() {
while (true) {
try {
res.out();
} catch (InterruptedException e) {
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐