在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简单示例的更多相关文章

  1. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  2. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  3. 根据juery CSS点击一个标签弹出一个遮罩层的简单示例

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. ACEXML解析XML文件——简单示例程序

    掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...

  5. demo工程的清单文件及activity中api代码简单示例

    第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...

  6. spring-servlet.xml简单示例

    spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...

  7. SignalR 简单示例

    一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...

  8. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

  9. XML引入多scheme文件约束简单示例

    XML引入多scheme文件约束简单示例,用company.xsd和department.xsd来约束company.xml: company.xsd <?xml version="1 ...

随机推荐

  1. 学习日记3、投机取巧使两个表的数据同时在一个treeGrid中显示

    不多说了直接上代码, $('#List').treegrid({ url: '@Url.Action("GetList")', width: $(window).width() - ...

  2. 字符串(一):char 数组

    字符串使用方法整理 系列: 字符串(一):char 数组 字符串(二):string 1. 声明 如下是一个例子(=> 表示表达式等价): char a[20] = "abcd&quo ...

  3. 4.HTML 常用标签及属性

    1. 链接 标签: <a></a> 属性: href:链接地址 target:打开方式 _blank:新标签页打开 _self:当前页面打开(默认) title:链接提示 2. ...

  4. xpath使用技巧

    爬虫中我们对于元素的定位有多种方法,大致有: Beautifulsoup.Xpath和正则表达式三种方式 其中效率比较为: Beautifulsoup<Xpath<正则表达式 习惯了使用B ...

  5. Microsoft Office Word

    快捷键 选区 选择块:[Shift]+click,光标放到块的一端,然后按住Shift,然后光标放到块的另一端. 更新域: F9 右键没有更新域选项时可以使用,如更新全部域先Ctrl + A然后F9 ...

  6. LookupError: "gw_lt" is not among the defined enum values

    LookupError: "XXX" is not among the defined enum value 查找错误:“xxx”不在定义的枚举值中 model.py中没有增加对应 ...

  7. RESTful三理解

    目录 目录 前言 Web应用的会话状态 Cookie 资源的表现形式 HATEOAS RESTful 资源 URI 前言 最近看了一篇很赞的RESTful博客,传送门:http://www.cnblo ...

  8. Postman 测试Xfire webservice

    权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u013177381/article/det ...

  9. 【python】 判断纯ascii串

    参考:http://stackoverflow.com/questions/3636928/test-if-a-python-string-is-printable print all(ord(c)& ...

  10. C#计算两个日期的相隔天数

    DateTime start = Convert.ToDateTime(dateStart.ToShortDateString()); DateTime end = Convert.ToDateTim ...