用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 线程间的协作

2012-11-23 作者: 程序猿style举报

[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();
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...