在Java的Condition接口中,存在的几个方法跟Synchronized中的wait(),waitall(),wait(time ^),这个几个方法一一对应起来,但是在Lock.newCondition()返回中可以指定指定的线程释放和等待资源。

请看【唤醒全部线程】实例:

 package TestThread.TestCondition;

 import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.*; public class TestCondition {
public static void main(String[] args) {
ReentrantLock lock = new ReentrantLock();
Condition condition = lock.newCondition();
Test1 th1 = new Test1(lock, condition, "线程1");
Test1 th2 = new Test1(lock, condition, "线程2");
Test1 th3 = new Test1(lock, condition, "线程3");
Test2 t2 = new Test2(condition, lock, "我是唤醒线程");
th1.start();
th2.start();
th3.start();
try {
Thread.sleep();
t2.start();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} class Test1 extends Thread {
private ReentrantLock lock;
private Condition condition1; public Test1(ReentrantLock lock, Condition condition1, String name) {
super(name);
this.lock = lock;
this.condition1 = condition1;
} @Override
public void run() {
for (int i = ; i < ; i++) {
try {
lock.lock();// 加锁
if (i == ) {
try {
condition1.await();
System.out.println(Thread.currentThread().getName() + "当前线程获取到的值为:++++++++++++" + i);
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName() + ":线程被中断了!");
}
} else {
System.out.println(Thread.currentThread().getName() + ":当前线程获取到的值为===》" + i);
}
} catch (Exception e) {
System.out.println("系统发生异常!");
} finally {
lock.unlock();// 解锁
}
}
}
} class Test2 extends Thread {
private Condition condition;
public ReentrantLock lock; /**
* @param condition协作对象
* @param lock锁对象
* @param name线程名称
*/
public Test2(Condition condition, ReentrantLock lock, String name) {
super(name);
this.condition = condition;
this.lock = lock;
} @Override
public void run() {
try {
lock.lock();// 加锁
condition.signalAll();;// 唤醒启动全部线程
System.out.println(Thread.currentThread().getName() + ":已经唤醒了一个线程!");
} catch (Exception e) {
System.out.println(Thread.currentThread().getName() + ":线程挂了!");
} finally {
lock.unlock();// 解锁
}
}
} 测试结果:


在Java的Condition接口【唤醒全部线程】的更多相关文章

  1. Java并发Condition接口

    java.util.concurrent.locks.Condition接口提供一个线程挂起执行的能力,直到给定的条件为真. Condition对象必须绑定到Lock,并使用newCondition( ...

  2. Java的LockSupport工具,Condition接口和ConditionObject

    在之前我们文章(关于多线程编程基础和同步器),我们就接触到了LockSupport工具和Condition接口,之前使用LockSupport工具来唤醒阻塞的线程,使用Condition接口来实现线程 ...

  3. 并发之lock的condition接口

    13.死磕Java并发-----J.U.C之Condition 12.Condition使用总结 11.Java并发编程系列之十七:Condition接口 === 13.死磕Java并发-----J. ...

  4. Java之多线程开发时多条件Condition接口的使用

    转:http://blog.csdn.net/a352193394/article/details/39454157 我们在多线程开发中,可能会出现这种情况.就是一个线程需要另外一个线程满足某某条件才 ...

  5. Java并发编程(十三)线程间协作的两种方式:wait、notify、notifyAll和Condition

    在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果 ...

  6. java多线程 -- Condition 控制线程通信

    Api文档如此定义: Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对 ...

  7. Java 并发编程之 Condition 接口

    本文部分摘自<Java 并发编程的艺术> 概述 任意一个 Java 对象,都拥有一个监视器方法,主要包括 wait().wait(long timeout).notify() 以及 not ...

  8. (三)juc高级特性——虚假唤醒 / Condition / 按序交替 / ReadWriteLock / 线程八锁

    8. 生产者消费者案例-虚假唤醒 参考下面生产者消费者案例: /* * 生产者和消费者案例 */ public class TestProductorAndConsumer { public stat ...

  9. java中的锁之Lock接口与Condition接口

    一.Lock源码. 1.是一个接口.一共有6个方法. 2.方法详细如下: (1)当前线程尝试获取锁.结果分两种情况,一是成功获取到锁,则返回:二是获取锁失败,则一直等待.不响应中断请求. (2)当前线 ...

随机推荐

  1. python--对象实例化过程

    实例化过程: class luffy_stu: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = ...

  2. VUE系列一:VUE入门:搭建脚手架CLI(新建自己的一个VUE项目)

    一.VUE脚手架介绍 官方说明:Vue 提供了一个官方的 CLI,为单页面应用快速搭建 (SPA) 繁杂的脚手架.它为现代前端工作流提供了 batteries-included 的构建设置.只需要几分 ...

  3. leetcode971

    class Solution: def flipMatchVoyage(self, root, voyage): res = [] self.i = 0 def dfs(root): if not r ...

  4. MTK6261 11C之Init Analysis【手记】

    初始化流程 Application_Initialize systemInitialization(); HWDInitialization(); USC_Start(); OSTD_Init(); ...

  5. sql中的常见报错;

    1.对于某些写的sql懒得判断的: SELECT * FROM sys_part WHERE part_no =(SELECT part_no FROM dbo.sys_part)  --字查询的结果 ...

  6. 容器——list(双向链表)

    做了一道list可以解决的题,才发现list多么的好 转自https://www.cnblogs.com/BeyondAnyTime/archive/2012/08/10/2631191.html 1 ...

  7. F查询和Q查询,事务及其他

    F查询和Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F ...

  8. JVM-如何判断对象存活与否与CMS收集器和G1收集器的区别

    JVM如何判断对象存活? 1.计数器 2.可达性分析   (很多主流语言采用这种方法来判断对象是否存活) 计数器:每当有一个地方引用该对象时,计数器 +1:引用失效则 -1: 优点:实现简单,判定效率 ...

  9. MySql:SELECT 语句(六) CONCAT() 函数的使用

    一.计算字段 为什么要用计算字段? 1)想要在一个字段中既显示公司地址,又显示公司名称,但是往往这两个都不在一个字段中 2)列数据是大小写混合的,但是报表程序需要把他们全部按大写形式展示出来 3)需要 ...

  10. C++并发编程学习笔记

    // //  main.cpp //  test1 // //  Created by sofard on 2018/12/27. //  Copyright © 2018年 dapshen. All ...