condition简单示例
在concurrent包中提供了condition接口,通过该接口可唤醒指定的某个线程,而不是采用随机唤醒的形式。
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; public class LockTest { private static Lock lock = new ReentrantLock();
private static Condition condition_1 = lock.newCondition();
private static Condition condition_2 = lock.newCondition(); public static void main(String[] args) throws InterruptedException {
/*Lock lock = new ReentrantLock();
Condition condition = lock.newCondition(); new Thread(() -> runLockMethod(lock, 1000),"thread-1").start();
new Thread(() -> runLockMethod(lock, 3000),"thread-2").start();
new Thread(() -> runLockMethod(lock, 5000),"thread-3").start();*/ LockTest test = new LockTest();
new Thread(() -> test.lockwait(condition_1), "thread-1").start();
new Thread(() -> test.lockwait(condition_2), "thread-2").start();
Thread.sleep(3000);
new Thread(() -> test.locksignal(condition_2), "thread-3").start();
new Thread(() -> test.locksignal(condition_1), "thread-4").start();
} /*private static void runLockMethod(Lock lock, long times) {
lock.lock();
try {
// List<Integer> list = Arrays.asList(1,2,3);
Thread.sleep(times);
System.out.println(Thread.currentThread().getName());
// list.forEach(System.out::println);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}*/ private void lockwait(Condition condition) {
lock.lock();
try {
System.out.println( Thread.currentThread().getName() +" start wait.......");
condition.await();
System.out.println( Thread.currentThread().getName() +" over wait.......");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
} private void locksignal(Condition condition) {
lock.lock();
try {
System.out.println(Thread.currentThread().getName() + " start notify....");
condition.signal();
} finally {
lock.unlock();
}
} }
condition简单示例的更多相关文章
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- demo工程的清单文件及activity中api代码简单示例
第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...
- spring-servlet.xml简单示例
spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...
- SignalR 简单示例
一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...
- Web API 简单示例
一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...
- XML引入多scheme文件约束简单示例
XML引入多scheme文件约束简单示例,用company.xsd和department.xsd来约束company.xml: company.xsd <?xml version="1 ...
随机推荐
- 英语单词deploy
来源——https://www.docker.com/ Leading companies rely on our container platform to build, manage and se ...
- ht-7 treeSet特性
TreeSetTreeSet可以对set集合中的元素进行排序,默认按照asic码表的自然顺序排序,之所以treeset能排序是因为底层是二叉树,数据越多越慢,TreeSet是依靠TreeMap来实现的 ...
- CABasicAnimation来做心跳动画
CABasicAnimation *anim = [CABasicAnimation animation]; anim.keyPath = @"transform.scale"; ...
- nodejs通过async/await来操作MySQL
在nodejs中从数据库得到数据后是通过回调函数来操作数据的,如果嵌套多层将非常可怕,代码逻辑和可读性将变得非常差.有时用promise也并不能很好得解决问题,因为如果用了promise后,代码将会有 ...
- BZOJ 3306: 树 LCT + set 维护子树信息
可以作为 LCT 维护子树信息的模板,写的还是比较优美的. 本地可过,bzoj 时限太紧,一直 TLE #include<bits/stdc++.h> #define setIO(s) f ...
- USACO 2006 November Gold Corn Fields
USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...
- (3)狄泰软件学院C++课程学习剖析一
深度剖析C++第一部分 1.类是一种模型,这种模型可以创建出一个对应的实体.有了类不一定有对应的实体,但是一个实体必定属于某一个类. 2.类用于抽象的描述 一类事物所持有的属性和行为:对象是具体的事物 ...
- JQuery触发hover事件无效时使用js原生的触发事件方法
需求:在开发一个从微信公众号后台管理网页上爬取数据的chrome插件时,有部分页面元素是只显示了部分摘要信息的,需要把鼠标移上去后才能显示全部信息(类似title的弹出显示).这就需要在chrome插 ...
- UVA10870 Recurrences (矩阵快速幂及构造方法详解)
题意: F(n) = a1 * F(n-1) + a2 * F(n-2)+ ···· + ad * F(n-d). 求给你的n . 很明显这是一道矩阵快速幂的题目. 题解: [Fn-1, Fn-2, ...
- Windows建立目录软连接
创建:mklink /j "I:\dst" "I:\src" 删除: rmdir "I:\dst"