condition是锁的一个实例,他可以与ReentrantLock结合使用,取代jdk自行操作的synchronize,自己控制锁的条件。
以下是使用实例:
package dirk.condition;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class BoundedBuffer {
// 可重入的互斥锁
final Lock lock = new ReentrantLock();
// 表示"缓冲区没满"条件
final Condition notFull = lock.newCondition();
// 表示"缓冲区非空"条件
final Condition notEmpty = lock.newCondition();
// 存储空间
//final Object[] items = new Object[100];
final ArrayList<Object> list = new ArrayList<Object>();
final Queue<Object> queue = new LinkedList<Object>();
final int maxSize = 10;
int putptr, takeptr, count;
public void put(Object x) throws InterruptedException {
lock.lock();
try {
while (count == maxSize)
notFull.await();
queue.offer(x);
++count;
notEmpty.signal();
} finally {
lock.unlock();
}
}
public Object take() throws InterruptedException {
lock.lock();
try {
while (count == 0)
notEmpty.await();
Object x = queue.poll();
--count;
notFull.signal();
return x;
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
int threadCount = 5;
BoundedBuffer b = new BoundedBuffer();
for(int i=0;i<threadCount;i++)
{
if(i%2 == 0)
new PutThread(b).start();
new TakeThread(b).start();
}
}
public static class PutThread extends Thread
{
private final BoundedBuffer b;
private int put = 0;
public PutThread(BoundedBuffer b)
{
this.b = b;
}
@Override
public void run() {
try {
String data = null;
while(true)
{
data = "data" + (++put);
System.out.println(data);
b.put(data);
Thread.sleep(100);
}
} catch (InterruptedException e) {
//e.printStackTrace();
Thread.currentThread().interrupt();
}
}
}
public static class TakeThread extends Thread
{
private final BoundedBuffer b;
public TakeThread(BoundedBuffer b)
{
this.b = b;
}
@Override
public void run() {
try {
while(true)
{
System.out.println(b.take());
}
} catch (InterruptedException e) {
//e.printStackTrace();
Thread.currentThread().interrupt();
}
}
}
}
分享到:
相关推荐
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
主要介绍了Java使用Condition控制线程通信的方法,结合实例形式分析了使用Condition类同步检测控制线程通信的相关操作技巧,需要的朋友可以参考下
主要介绍了Java编程中实现Condition控制线程通信,简单介绍了Java中控制线程通信的方法,以及对condition的解析和实例,具有一定参考价值,需要的朋友可以了解下。
主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
11.2.1 lock、readwritelock与condition 349 11.2.2 使用executor 357 11.2.3 并行collection简介 370 11.3 重点复习 373 11.4 课后练习 375 chapter12 通用api 377 12.1 日志 378 12.1.1 日志api简介...
全书通过60多个简单而非常有效的实例,帮助读者快速掌握Java 7多线程应用程序的开发技术。学习完本书,你可以将这些开发技术直接应用到自己的应用程序中。 《Java 7并发编程实战手册》适合具有一定Java编程基础的...
内容简介:此书结合具体实例讲解,通俗易懂,又不乏深度。我觉得这本书写的确实不错,堪称经典,市面上这样的书实在太少了,所以在这里发布下,供大家共享。本书从编程技术、项目实践以及软件工程的角度出发,如果...
内容简介:此书结合具体实例讲解,通俗易懂,又不乏深度。我觉得这本书写的确实不错,堪称经典,市面上这样的书实在太少了,所以在这里发布下,供大家共享。本书从编程技术、项目实践以及软件工程的角度出发,如果...
内容简介:此书结合具体实例讲解,通俗易懂,又不乏深度。我觉得这本书写的确实不错,堪称经典,市面上这样的书实在太少了,所以在这里发布下,供大家共享。本书从编程技术、项目实践以及软件工程的角度出发,如果...
Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...
14.3 显式的Condition对象251 14.4 Synchronizer剖析253 14.5 AbstractQueuedSynchronizer254 14.6 java.util.concurrent同步器类中的 AQS257 14.6.1 ReentrantLock257 14.6.2 Semaphore与CountDownLatch258 ...
React功能的Java 受scala启发的Java功能/React性代码的通用存储桶,利用了Java 8给我们带来的好处。 ## Result Result对象不仅仅是一个简单的元组。 它被设计用来显式地向API使用者发出信号,即某种方法可能会产生...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
本文实例讲述了Python中的True,False条件判断用法。分享给大家供大家参考。具体分析如下: 对于有编程经验的程序员们都知道条件语句的写法: 以C++为例: 复制代码 代码如下:if (condition) { doSomething();...
由于实习需要,需要通过ajax来获取后台的List集合里面的值。由于前面没有接触过,所以今天就来研究下... 1、身份证错误信息Bean类(ErrorCondition.java) 代码如下: /** *@Project: excel *@Author: chenssy *@Date: 20
在Simulator的main()方法内,创建Car对象的实例,然后调用该对象的run()方法。 现在,您将创建其他类,它们代表汽车的不同组件-发动机,油箱,车轮等。这些类应具有与其行为相关的方法,并具有代表其各种状态的...
本文实例讲述了Python三元运算实现方法。分享给大家供大家参考。具体分析如下: Python中没有像C++和Java等语言中的三元运算符,但是可以用if else语句实现相同的功能: 复制代码 代码如下:>>> condition = True >...
本文将step by step的讲述第一个selenium实例: step1:下载selenium-remote-control.下载地址:http://www.openqa.org/selenium-rc/download.action step2:打开eclipse 新建java project. step3:将junit.jar,selenium-...
synchronized关键字加在静态方法和实例方法的区别; 用锁的注意点; cas机制可能导致的问题ABA,什么是ABA; 程序开多少线程合适; 实现一下DCL(双重检查锁) stream 和 parallelStream区别; 实现一个阻塞队列(用...
一个Task instance(任务实例)可以被分配给一个actorId (java.lang.String)。所有的Task instance都被保存在数据库中的表jbpm_taskinstance里。当你想得到特定用户的任务清单时,你就可以通过一个与用户关联的...