Java学习提要——sleep()和wait()的实例与区别

来源:互联网 发布:通达信均线公式源码 编辑:程序博客网 时间:2024/05/16 01:19

非常经典的多线程处理模型

//生产者与消费者实例class Info {    private String title ;    private String content ;    private boolean flag = true ;    // flag = true,表示可以生产,但是不可以取走    // flag = flase,表示可以取走,但是不可以生产    public synchronized void set(String title,String content) {        // 重复进入到set()方法里面,发现不能够生产,所以要等待        if(this.flag == false) {            try{                super.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        this.title = title ;        try {  //休眠            Thread.sleep(100);        }catch (InterruptedException e ) {            e.printStackTrace();        }        this.content = content ;        this.flag = false ; //修改生产标记        super.notify();  // 唤醒其他等待线程    }    public synchronized void get() {        if(this.flag == true) {            try{                super.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        try{            Thread.sleep(100);        } catch (InterruptedException e ) {            e.printStackTrace();        }        System.out.println(this.title + " - " + this.content);        this.flag = true ;        super.notify();    }}class Productor implements Runnable {    private Info info ;    public Productor (Info info){        this.info = info ;    }    public void run() {        for(int x=0 ; x < 10 ; x++ ){            if(x % 2 == 0) {                this.info.set("liu","nice");            }else {                this.info.set("qin","good");            }        }    }}class Customer implements Runnable {    private Info info ;    public Customer (Info info) {        this.info = info ;    }    public void run() {        for(int x=0 ; x<10 ; x++){            this.info.get();        }    }}public class Nice {    public static void main(String args[]){        Info info = new Info();        new Thread(new Productor(info)).start() ;        new Thread(new Customer(info)).start() ;    }}

! sleep()与wait()的区别?

1.sleep()是Thread类定义的方法,wait()是Object()类定义的方法;
2.sleep()可以设置休眠时间,时间一到自动唤醒,而wait()需要等待notify()进行唤醒;

0 0