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

开发者学堂课程【【名师课堂】Java 高级开发【第 06 个代码模型】综合案例:生产者与消费者(解决重复操作问题)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/372/detail/4567


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


内容介绍

一、方法名称

二、范例

 

一、方法名称

NO.

方法名称

类型

描述

01

Public final void wait()throws InterruptedException

普通

等待、死等

02

Pudlic final void notify()

普通

唤醒第一个等待线程

03

Pudlic 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) { l/已经生产了,所以不允许重复生产

try i

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

catch (InterruptedException e) i

e.printstackTrace(;

}

Thread.sleep(5e);

}catch (InterruptedException e) {

e.printstackTrace();

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

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

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

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

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

try i

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

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

this.title = title ;

try i

Thread.sleep(10);

}catch (InterruptedException e) i

e.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() 才可以唤醒。

上一篇:iOS开发多线程篇—NSOperation简单介绍


下一篇:NGINX配置ssl