java线程协作_java 线程间的协作
[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 线程间的协作相关推荐
- java线程协作_java线程系列之三(线程协作)
上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者问题是一个经典的线程同步以及通信的案例.该问题描述了两个共享固定大小缓冲区的线程,即所谓 ...
- java 线程状态_Java线程为何没有Running状态?我猜你不知道。
作者:国栋原文:https://my.oschina.net/goldenshaw/blog/705397 Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言, ...
- java dump 工具_Java线程Dump分析工具--jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...
- java 线程不足_Java 线程基础知识
wait() 和notify().notifyAll() 这三个方法用于协调多个线程对共享数据的存取,所以必须在 Synchronized 语句块内使用这三个方法,否则会抛出错 IllegalMoni ...
- java线程触发_java线程
线程. 状态 新建状态(New): 当用 new 操作符创建一个线程时, 例如 new Thread(r),线程还没有开始运行,此时 线程处在新建状态. 当一个线程处于新生状态时,程序还没有开始运行线 ...
- java 线程状态_JAVA线程漫谈:线程状态与状态转换解析
线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...
- java+向前进一_Java 线程基础
前言 线程并发系列文章: 熟练掌握线程原理与使用是程序员进阶的必经之路,网上很多关于Java线程的知识,比如多线程之间变量的可见性.操作的原子性,进而扩展出的Volatile.锁(CAS/Synchr ...
- java线程 属性_Java 线程基础
本文部分摘自<Java 并发编程的艺术> 线程简介 1. 什么是线程? 现代操作系统在运行一个程序时,会为其创建一个进程,一个进程里可以创建多个线程.现代操作系统调度的最小单元是线程,也叫 ...
- 苹果系统手机调用java线程出错_Java线程面试题
2) 线程和进程有什么区别? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.线程是进程的子集,一个进程可以有很多线程, ...
最新文章
- 数字汽车钥匙的安全性增强技术
- php$pat,PHP的Session管理框架 patSession | 码农软件 - 码农网
- 银河麒麟可执行文件双击,闪退问题
- vue2.0 子组件和父组件之间的传值
- php中文歌词,将酷狗krc歌词解析并转换为lrc歌词php源码
- sql 显示百分比_轻松搞定数据分析之SQL——简单查询
- WordPress主题-果核剥壳站长开发CorePress v2.6
- 非root安装php nginx,非root用户安装nginx
- 面试题简答题——数据库相关汇总
- $《第一行代码:Android》读书笔记——第6章 数据持久化
- 光绪变法为什么没成功
- PMP考试-风险管理专项突破(第六版)
- matlab中pts什么意思,【网安学术】使用PTS和SLM联合技术降低FBMC-OQAM系统的PAPR
- 基于时域线性插值法计算信号的周期
- opencv读取超大像素图片
- Android SDK 字段及功能的分析详解
- 2018年中考计算机考试成绩,2018年北京中考考试科目、时间及成绩公布通知
- ios设置音乐audio自动播放
- python append使用方法
- 如何使用计算机处理文件,怎么处理电脑的缓存文件