Java多线程学习——Condition的使用
来源:互联网 发布:2016淘宝联盟使用教程 编辑:程序博客网 时间:2024/06/05 13:26
Condition
将 Object
监视器方法(wait
、notify
和 notifyAll
)分解成截然不同的对象,以便通过将这些对象与任意 Lock
实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock
替代了synchronized
方法和语句的使用,Condition
替代了 Object 监视器方法的使用。
条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”)。因为访问此共享状态信息发生在不同的线程中,所以它必须受保护,因此要将某种形式的锁与该条件相关联。等待提供一个条件的主要属性是:以原子方式 释放相关的锁,并挂起当前线程,就像 Object.wait
做的那样。
Condition
实例实质上被绑定到一个锁上。要为特定 Lock
实例获得 Condition
实例,请使用其newCondition()
方法。
三个线程依次答应ABC,代码示例如下:
class Business
{
private Lock lock = new ReentrantLock();
private Condition conditionA = lock.newCondition();
private Condition conditionB = lock.newCondition();
private Condition conditionC = lock.newCondition();
private String type = "A";
public void A()
{
lock.lock();
try
{
while (type != "A")
{
try
{
conditionA.await();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 正在打印A");
type = "B";
conditionB.signal();
} finally
{
lock.unlock();
}
}
public void B()
{
lock.lock();
try
{
while (type != "B")
{
try
{
conditionB.await();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 正在打印B");
type = "C";
conditionC.signal();
} finally
{
lock.unlock();
}
}
public void C()
{
lock.lock();
try
{
while (type != "C")
{
try
{
conditionC.await();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + " 正在打印C");
type = "A";
conditionA.signal();
} finally
{
lock.unlock();
}
}
}
- Java多线程学习——Condition的使用
- java多线程之Condition的使用
- Java多线程应用-condition的使用
- java多线程之Condition的使用
- Java 多线程中Condition的使用
- java 多线程Condition接口的使用
- 关于Java多线程和并发运行的学习(四)——之Condition
- java多线程学习笔记——concurrent包的一些类(Lock 和Condition)
- Java—Lock&Condition的使用
- Java多线程——Condition条件
- java学习——如何实现线程之间的通信 ,Condition 的使用
- Java多线程开发之~~~多条件Condition接口的使用
- JAVA多线程-Lock的使用(一)-ReentrantLock与Condition
- Java多线程编程4--Lock的使用--重入锁(ReentrantLock)、Condition
- Java多线程 之 lock与condition的使用(十四)
- Java多线程11:ReentrantLock的使用和Condition
- java多线程-Lock与Condition接口的使用详解
- java多线程学习笔记(七) ——消费者与生产者(LOCK、Condition接口)
- Mybatis resultMap解析
- 为什么说胸大无脑?
- iOS开发26:UIImageView常用操作
- Cocos2d-x2.1.4的android环境配置及使用
- Linux压缩打包命令使用方法
- Java多线程学习——Condition的使用
- PAT 1030 Travel Plan (30)
- Java开发中的23种设计模式详解
- EXT学习之路【发现一个重点】会引起滚动条的异常
- C++笔试题 String类的实现 三大复制控制函数
- iOS appStore中的应用 实现升级功能2
- android开发必备知识
- Task(Activity栈) 详解
- 根文件系统的建立