Java await/signal基础应用
2017-06-10 17:40
369 查看
await和signal类似wait和notify的关系,await会阻塞当前线程,直到接收到signal后唤醒继续执行,这也是线程的一种通信机制
问题:多线程交替打印字符
测试代码
效果:
问题:多线程交替打印字符
测试代码
package com.zhiwei.thread; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class TheadAwait { public boolean flag = true; Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); public void get() { try { Thread.sleep(5000); lock.lock(); while (!flag) { condition.await(); } System.out.println(Thread.currentThread().getName()+":-----------------"); flag = !flag; condition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void put() { try { Thread.sleep(5000); lock.lock(); while (flag) { condition.await(); } System.out.println(Thread.currentThread().getName()+":*****************"); flag = !flag; condition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public static void main(String[] args) { TheadAwait alternatelyPrint = new TheadAwait(); while (true) { new Thread(new Runnable() { @Override public void run() { alternatelyPrint.get(); } }).start(); new Thread(new Runnable() { @Override public void run() { alternatelyPrint.put(); } }).start(); } } }
效果:
相关文章推荐
- 基础应用:java web三层架构程序实例
- JAVA基础应用: 处理Java中的日期问题
- Java Web应用中如何实现任务有效调度-Java基础-Java-编程开发
- Java Servlet 编程及应用之三-Java基础-Java-编程开发
- Java Servlet 编程及应用之五-Java基础-Java-编程开发
- Extraction应用构建平台应用基础(八)------数据类型和Java对象的映射关系篇
- POJO应用架构:Spring与EJB 3.0的对比-Java基础-Java-编程开发
- Java.util包简介并教您如何开发应用之二-Java基础-Java-编程开发
- Java 在Client/Server 网络中的应用-Java基础-Java-编程开发
- Java Servlet 编程及应用之二-Java基础-Java-编程开发
- JAVA基础应用: 如何实现希尔排序算法
- JAVA基础:漫谈Java程序设计中的接口应用
- Java 编程基础,应用与实例
- 学习使用J2EE Web应用的事件功能-Java基础-Java-编程开发
- 在Web应用中动态创建PDF文件-Java基础-Java-编程开发
- JAVA基础应用: 处理Java中的日期问题
- java基础应用之ArrayList
- Java应用技巧-Java基础-Java-编程开发
- 用Java快速开发Linux GUI应用-Java基础-Java-编程开发
- Java Servlet 编程及应用(一)-Java基础-Java-编程开发