aaarticlea/png;base64,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" alt="" />
在 Condition 对象中,与 wait、notify 和 notifyAll 方法对应的分别是
await、signal 和 signalAll。
Condition 实例实质上被绑定到一个锁上。
要为特定 Lock 实例获得 Condition 实例,请使用其 newCondition() 方法。
package com.wf.zhang.juc;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/*
* 生产者消费者案例:
*/
public class TestProductorAndConsumerForLock {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Productor pro = new Productor(clerk);
Consumer con = new Consumer(clerk);
new Thread(pro, "生产者 A").start();
new Thread(con, "消费者 B").start();
// new Thread(pro, "生产者 C").start();
// new Thread(con, "消费者 D").start();
}
}
class Clerk {
private int product = 0;
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
// 进货
public void get() {
lock.lock();
try {
if (product >= 1) { // 为了避免虚假唤醒,应该总是使用在循环中。
System.out.println("产品已满!");
try {
condition.await();
} catch (InterruptedException e) {
}
}
System.out.println(Thread.currentThread().getName() + " : "
+ ++product);
condition.signalAll();
} finally {
lock.unlock();
}
}
// 卖货
public void sale() {
lock.lock();
try {
if (product <= 0) {
System.out.println("缺货!");
try {
condition.await();
} catch (InterruptedException e) {
}
}
System.out.println(Thread.currentThread().getName() + " : "
+ --product);
condition.signalAll();
} finally {
lock.unlock();
}
}
}
// 生产者
class Productor implements Runnable {
private Clerk clerk;
public Productor(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.get();
}
}
}
// 消费者
class Consumer implements Runnable {
private Clerk clerk;
public Consumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
clerk.sale();
}
}
}
- 四、线程同步之Lock和Condition
Lock同步锁 Lock 在jdk1.5 提供了Lock以便执行同步操作,和synchronized不同的是Lock提供了显示的方法获取锁和释放锁.Lock提供了以下几个方法,请求和释放锁: voi ...
- 线程高级应用-心得5-java5线程并发库中Lock和Condition实现线程同步通讯
1.Lock相关知识介绍 好比我同时种了几块地的麦子,然后就等待收割.收割时,则是哪块先熟了,先收割哪块. 下面举一个面试题的例子来引出Lock缓存读写锁的案例,一个load()和get()方法返回值 ...
- 【Java线程】Lock、Condition
http://www.infoq.com/cn/articles/java-memory-model-5 深入理解Java内存模型(五)——锁 http://www.ibm.com/develope ...
- 【Java线程】锁机制:synchronized、Lock、Condition
http://www.infoq.com/cn/articles/java-memory-model-5 深入理解Java内存模型(五)——锁 http://www.ibm.com/develope ...
- 并发之lock的condition接口
13.死磕Java并发-----J.U.C之Condition 12.Condition使用总结 11.Java并发编程系列之十七:Condition接口 === 13.死磕Java并发-----J. ...
- Lock和Condition在JDK中LinkedBlockingQueue的应用
Lock和Condition在JDK中LinkedBlockingQueue的应用,核心源码注释解析如下: import java.util.concurrent.LinkedBlockingQueu ...
- java并发编程系列三、Lock和Condition
有了synchronized为什么还要Lock? 因为Lock和synchronized比较有如下优点 1. 尝试非阻塞地获取锁 2. 获取锁的过程可以被中断 3. 超时获取锁 Lock的标准用法 p ...
- 多线程系列三:Lock和Condition
有了synchronized为什么还要Lock? 因为Lock和synchronized比较有如下优点 1. 尝试非阻塞地获取锁 2. 获取锁的过程可以被中断 3. 超时获取锁 Lock的标准用法 p ...
- Lock和Condition
1 什么是可重入锁 可重入锁是说一个线程在已经获取了该锁的情况下,还可以再次获取该锁. 主要的应用场景: 可重入锁指的是在一个线程中可以多次获取同一把锁,比如:一个线程在执行一个带锁的方法,该方法中又 ...
- 【Java线程】锁机制:synchronized、Lock、Condition(转)
原文地址 1.synchronized 把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility). 1.1 原子性 ...
随机推荐
- bbbbbb
Blazor 机制初探以及什么是前后端分离,还不赶紧上车? 标签: Blazor .Net 上一篇文章我发了一个 BlazAdmin 的尝鲜版,这一次主要聊聊 Blazor 是如何做到用 C# 来写前 ...
- 【UR #6】懒癌
Problem Description 你绞尽脑汁也没有解开智商锁给的迷题,只见哐地一下门就开了:"您与锁的主人智商一致." 于是你们窃取了大量内部资料,最后端掉了 \(IIIS\ ...
- 【AGC028D】Chord
Problem Description 给定一个圆,圆上均等地放着 \(2n\) 个点,已有 \(k\) 对点之间连好了边,从中选择剩下 \(n-k\) 对点随意连边. 求所有连边方案中,联通块的个数 ...
- 每天3分钟操作系统修炼秘籍(6):Idle进程
点我查看秘籍连载 CPU的归属:Idle进程 操作系统并不总是繁忙.例如个人PC上任务比较轻,多数时候都无法充分利用CPU,导致CPU处于空闲状态.但CPU既然通电了,它就得运行,那么在它没有任务需要 ...
- SSH框架之Spring第四篇
1.1 JdbcTemplate概述 : 它是spring框架中提供的一个对象,是对原始JdbcAPI对象的简单封装.spring框架为我们提供了很多的操作模板类. ORM持久化技术 模板类 JDBC ...
- node error SOCKET error:10106
上周我的node.js command prompt出错了,什么也干不了 SOCKET error:10106 纠结两天,终于搞定了,其实比较简单,就是不会弄起来好麻烦 参考: 作者:忆常 url: ...
- HTML 表单模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C lang:Protect array data——Const
Xx_Introduction Use pointer translate parameter array original data will change data,and use const p ...
- 2、nio的例子实践
下面的例子,说明了,nio中的三大核心类的基本使用.buffer,channel,selector package com.shengsiyuan.nio; import org.junit.Test ...
- Oracle - SPM固定执行计划
1. 通过dbms_xplan.display_cursor查看指定sql都有哪些执行计划 SQL> select * from table(dbms_xplan.display_cursor( ...