在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. jquery用法第二波

    过滤器 属性过滤选择器: $("div[id]")选取有id属性的<div> $(“#id”) $("div[title=test]")选取titl ...

  2. XMLUtil

    package Testlink; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; imp ...

  3. Fckeditor实现WORD粘贴图片自动上传

    在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...

  4. Quick Notes

    激励 每当在书中读及那些卑微的努力,都觉得感动且受震撼.也许每个人在发出属于自己的光芒之前,都经历了无数的煎熬,漫长的黑夜,无尽的孤独,甚至不断的嘲讽和否定,但好在那些踮脚的少年,最后都得到了自己想要 ...

  5. E:\Postgresql\pgAdmin4_binaryPath

    e Path to the directory containing the EDB Advanced Server utility programs (pg_dump, pg_restore etc ...

  6. 前后端分离及React的一些研究

    前言 在对英才网企业线前端不断的完善过程中,我们尝试进行了前后端分离,引入Node环境.以及在使用React的过程中,自行开发DOM渲染框架,解决React兼容低版本IE的问题,在这个过程中,我们有了 ...

  7. scrapy-redis源码浅析

    原文链接 前言 分析这个项目的源码原因是需要有去重过滤,增量爬取两个功能,而scrapy-redis项目已经帮我们实现了,想看看他是怎么实现的.这里只贴出部分主要代码,查看时请打开源码对照,笔记有点长 ...

  8. pycharm项目代码上传远程centos服务器

    pycharm项目代码上传远程centos服务器 在工作中,我们经常会遇到如下情况,在windows系统下的pycharm中开发项目,但是需要在linux服务器上部署和运行我们的项目.那么我们的项目是 ...

  9. iframe的基础应用

    点击top.html里面的按钮,刷新left.html右边的内容 <a href="left.html?id=11111&k=5&b=4"  target=& ...

  10. Entity Framework Code First (五)Fluent API - 配置关系 转载 https://www.cnblogs.com/panchunting/p/entity-framework-code-first-fluent-api-configuring-relationships.html

    上一篇文章我们讲解了如何用 Fluent API 来配置/映射属性和类型,本文将把重点放在其是如何配置关系的. 文中所使用代码如下 public class Student { public int ...