java线程协作_java 线程间的协作
[java]代碼庫(kù)import java.util.Vector;
/**
* 線(xiàn)程間的協(xié)作
*/
public class WaitNotify {
/**
* 打印信息的類(lèi),是一個(gè)線(xiàn)程。
*/
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){
//如果任務(wù)列表為空,而且線(xiàn)程還允許運(yùn)行,則等待任務(wù)
System.out.println("wait begin!");
//該線(xiàn)程進(jìn)入等待狀態(tài),直到被其他線(xiàn)程喚醒
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();
}
}
/**
* 添加待打印的任務(wù)
*/
public void addTask(String str){
synchronized (this){
this.task.add(str);
//喚醒其他等待的線(xiàn)程
System.out.println("addTask notify!");
notify();
//notifyAll();
}
}
/**
* 停止線(xiàn)程
*/
public void stopPrinter(){
this.running = false;
synchronized (this){
//喚醒其他等待的線(xiàn)程
System.out.println("stopPrinter notify!");
notify();
}
}
}
public static void main(String[] args) {
Printer printer = new Printer();
//啟動(dòng)打印線(xiàn)程
printer.start();
//添加任務(wù)
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();
}
}
總結(jié)
以上是生活随笔為你收集整理的java线程协作_java 线程间的协作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python中序列和列表区别细菌真菌病毒
- 下一篇: java实现分发_关于JAVA中事件分发