66java综合案例:生产者与消费者(解决重复操作问题)

85 阅读2分钟

【第 06 个代码模型】综合案例:生产者与消费者(解决重复操作问题)

一、方法名称

NO.方法名称类型描述
01Public final void wait()throws InterruptedException普通等待、死等
02Pudlic final void notify()普通唤醒第一个等待线程
03Pudlic final void notify()普通唤醒全部等待线程,那个优先级高,谁有可能先执行

现在的代码之中依然会存在有数据的重复设置或重复取出的问题,所以如果想要解决他就必须增加等待与唤醒机制。如果要想使用这一功能,就必须参考 Object 类中提供的方法;


二、范例

通过等待与唤醒机制来解决数据的重复操作问题

private string title;private string note;

// flag = true:表示允许生产,但是不允许消费者取走

//falg = false:表示生产完毕,允许消费者取走,但是不能够生产
private boolean flag = true ;

public synchronized void get( {

if (flag m= true) { //已经生产了,所以不允许重复生产

try i.super.wait(o;//t等待执行

catch (InterruptedException e) ie.printstackTrace(;

}

Thread.sleep(5e);

}catch (InterruptedException e) {e.printstackTrace();

if (flag == false){ //已经生产了,所以不允i

this.flag = false ; //表示已经生产过了,不允许再生产了

super.notify; //唤醒等待线程|

public synchronized void set(string title,string note) {

if (this.flag == false) i //广现在不允许取走

try i

super.wait(o;//等待执行

}catch (InterruptedException e) f.e.printstackTrace(o;

this.title = title ;

try i

Thread.sleep(10);

}catch (InterruptedException e) ie.printstackTrace();

this.note = note ;

public synchronized void set(String title,strir

if (this.flag == true i//现在不允许取走

trv {

this.note = note ;

this.flag = true ; l/表示继续生产super.notify(); l

}

 

面试题:请解释是 sleep()与wait() 的区别?

sleep() 是 Thread 类中定义的方法,到了一定的时间后该休眠的线程可以自动唤醒

wait()Object 类中的定义的方法,如果想要唤醒,必须使用 notify()、notifyAll() 才可以唤醒。