[java]代码库import java.util.Vector;

/**

* 线程间的协作

*/

public class WaitNotify {

/**

* 打印信息的类,是一个线程。

*/

static class Printer extends Thread{

Vector task = new Vector();

boolean running = false;

public void start(){

this.running = true;

super.start();

}

public void run(){

try {

System.out.println("Printer begin!");

while (running){

synchronized(this) {

while ((task.size() == 0) && running){

//如果任务列表为空,而且线程还允许运行,则等待任务

System.out.println("wait begin!");

//该线程进入等待状态,直到被其他线程唤醒

wait();

System.out.println("wait end!");

}

}

if (running){

System.out.println("print the task: " + task.remove(0));

}

}

System.out.println("Printer end!");

} catch (InterruptedException e) {

e.printStackTrace();

}

}

/**

* 添加待打印的任务

*/

public void addTask(String str){

synchronized (this){

this.task.add(str);

//唤醒其他等待的线程

System.out.println("addTask notify!");

notify();

//notifyAll();

}

}

/**

* 停止线程

*/

public void stopPrinter(){

this.running = false;

synchronized (this){

//唤醒其他等待的线程

System.out.println("stopPrinter notify!");

notify();

}

}

}

public static void main(String[] args) {

Printer printer = new Printer();

//启动打印线程

printer.start();

//添加任务

try {

Thread.sleep(200);

for (int i=0; i<5; i++){

//休眠200毫秒

Thread.sleep(200);

printer.addTask("The task " + i);

}

}

catch (InterruptedException e) {

e.printStackTrace();

}

printer.stopPrinter();

}

}

java线程协作_java 线程间的协作相关推荐

  1. java线程协作_java线程系列之三(线程协作)

    上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者问题是一个经典的线程同步以及通信的案例.该问题描述了两个共享固定大小缓冲区的线程,即所谓 ...

  2. java 线程状态_Java线程为何没有Running状态?我猜你不知道。

    作者:国栋原文:https://my.oschina.net/goldenshaw/blog/705397 Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言, ...

  3. java dump 工具_Java线程Dump分析工具--jstack

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  4. java 线程不足_Java 线程基础知识

    wait() 和notify().notifyAll() 这三个方法用于协调多个线程对共享数据的存取,所以必须在 Synchronized 语句块内使用这三个方法,否则会抛出错 IllegalMoni ...

  5. java线程触发_java线程

    线程. 状态 新建状态(New): 当用 new 操作符创建一个线程时, 例如 new Thread(r),线程还没有开始运行,此时 线程处在新建状态. 当一个线程处于新生状态时,程序还没有开始运行线 ...

  6. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析

    线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...

  7. java+向前进一_Java 线程基础

    前言 线程并发系列文章: 熟练掌握线程原理与使用是程序员进阶的必经之路,网上很多关于Java线程的知识,比如多线程之间变量的可见性.操作的原子性,进而扩展出的Volatile.锁(CAS/Synchr ...

  8. java线程 属性_Java 线程基础

    本文部分摘自<Java 并发编程的艺术> 线程简介 1. 什么是线程? 现代操作系统在运行一个程序时,会为其创建一个进程,一个进程里可以创建多个线程.现代操作系统调度的最小单元是线程,也叫 ...

  9. 苹果系统手机调用java线程出错_Java线程面试题

    2) 线程和进程有什么区别? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.线程是进程的子集,一个进程可以有很多线程, ...

最新文章

  1. 数字汽车钥匙的安全性增强技术
  2. php$pat,PHP的Session管理框架 patSession | 码农软件 - 码农网
  3. 银河麒麟可执行文件双击,闪退问题
  4. vue2.0 子组件和父组件之间的传值
  5. php中文歌词,将酷狗krc歌词解析并转换为lrc歌词php源码
  6. sql 显示百分比_轻松搞定数据分析之SQL——简单查询
  7. WordPress主题-果核剥壳站长开发CorePress v2.6
  8. 非root安装php nginx,非root用户安装nginx
  9. 面试题简答题——数据库相关汇总
  10. $《第一行代码:Android》读书笔记——第6章 数据持久化
  11. 光绪变法为什么没成功
  12. PMP考试-风险管理专项突破(第六版)
  13. matlab中pts什么意思,【网安学术】使用PTS和SLM联合技术降低FBMC-OQAM系统的PAPR
  14. 基于时域线性插值法计算信号的周期
  15. opencv读取超大像素图片
  16. Android SDK 字段及功能的分析详解
  17. 2018年中考计算机考试成绩,2018年北京中考考试科目、时间及成绩公布通知
  18. ios设置音乐audio自动播放
  19. python append使用方法
  20. 如何使用计算机处理文件,怎么处理电脑的缓存文件

热门文章

  1. VTK修炼之道54:图形基本操作进阶_表面重建技术(三角剖分)
  2. VTK修炼之道28:图像统计_灰度直方图计算
  3. c++/cli之我见
  4. 二元运算符的运算符重载
  5. 【⌛工欲善其事,必先利其器⏳】葵花宝典の费曼学习法
  6. Mysql事务隔离级别及MVCC(多版本并发控制)
  7. 日常生活小技巧 -- word中插入visio和视频
  8. 图像和流媒体 -- 详解YUV数据格式
  9. stl-unique()函数去重
  10. Bit-Z 项目评审中心开启首次投票币竞选