二、生产者消费者模式的学生类成员变量生产与消费demo,

@Version2.0

  在学生类中添加同步方法:synchronized get()消费者,synchronized set()生产者

  最终版的代码中: 把student的成员变量给私有化了,
  把设置和获取的功能给封装成了功能,并加了同步,
  设置或者获取的线程里面只需要调用方法即可。

1、等待唤醒:
      Object类中提供了三个方法:
      wait():等待
      notify():唤醒单个线程
      notifyAll():唤醒所有线程
//==========================

//首先是重点学生类对象

 public class Student {
private String name;
private int age;
private boolean flag; // 同步方法
public synchronized void set(String name, int age) {
// 如果有数据就等待
if (this.flag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} // 设置数据
this.name = name;
this.age = age; // 一旦有了数据修改标记,并唤醒
this.flag = true;
this.notify();
} // 同步获取方法
public synchronized void get() {
// 如果没有数据就等待
if (!this.flag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 获取数据
System.out.println(this.name + "--- " + this.age);
//获取到数据后,修改标记为false,最后唤醒。
this.flag = false;
this.notify();
}

// 生产者的线程,这次超级简单~~~··

 public class setThread implements Runnable {
private Student s;
private int x = 0; public setThread(Student s) {
this.s = s;
} @Override
public void run() {
while (true) { if (x % 2 == 0) {
s.set("java", 30);
} else {
s.set("Android", 20);
}
x++;
} } }

// 消费者的线程,这次超级简单~~~··

 public class getThread implements Runnable {
private Student s; public getThread(Student s) {
this.s = s;
} public void run() {
while (true) {
s.get();
}
}
}

// 消费者的线程,这次超级简单~~~··

 public class Demo {
public static void main(String[] args) {
//共享数据,外界创建,作为参数,通过构造共有
Student s = new Student();
//在构造中使用同一个参数
setThread st = new setThread(s);
getThread gt = new getThread(s); Thread t1 = new Thread(st);// 设置数据
Thread t2 = new Thread(gt); // 获取数据 t2.start();
t1.start();
}
}

java多线程中的生产者与消费者之等待唤醒机制@Version2.0的更多相关文章

  1. java多线程中的生产者与消费者之等待唤醒机制@Version1.0

    一.生产者消费者模式的学生类成员变量生产与消费demo,第一版1.等待唤醒:    Object类中提供了三个方法:    wait():等待    notify():唤醒单个线程    notify ...

  2. Android(java)学习笔记71:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...

  3. Android(java)学习笔记11:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中,关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 下面 ...

  4. java ->多线程_线程同步、死锁、等待唤醒机制

    线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. l  我们通过一个案例,演示线 ...

  5. java多线程(死锁,lock接口,等待唤醒机制)

    一.Lock接口 常用方法 Lock提供了一个更加面对对象的锁,在该锁中提供了更多的操作锁的功能. 使用Lock接口,以及其中的lock()方法和unlock()方法替代同步,对电影院卖票案例中Tic ...

  6. Java多线程设计模式(2)生产者与消费者模式

    1 Producer-Consumer Pattern Producer-Consumer Pattern主要就是在生产者与消费者之间建立一个“桥梁参与者”,用来解决生产者线程与消费者线程之间速度的不 ...

  7. Java多线程与并发——生产者与消费者应用案例

    多线程的开发中有一个最经典的操作案例,就是生产者-消费者,生产者不断生产产品,消费者不断取走产品. package com.vince; /** * 生产者与消费者案例 * @author Admin ...

  8. java多线程之多生产者-多消费者

    多生产者和多消费者是线程通信的经典案例,但是和生产者-消费者相比更为复杂,而且可能会产生程序假死. public class Product { private MyStack myStack; pu ...

  9. Linux内核中实现生产者与消费者(避免无效唤醒)【转】

    转自:http://blog.csdn.net/crazycoder8848/article/details/42581399 本文关注的重点是,避免内核线程的无效唤醒,并且主要是关注消费者线程的设计 ...

随机推荐

  1. ionic 上拉加载更多&瀑布流加载&滚动到底部加载更多 主意事项

    首先下拉刷新的代码是这样的,标红的地方为关键代码 <html> <head> <meta charset="utf-8"> <meta n ...

  2. Android Service学习之AIDL, Parcelable和远程服务

    AIDL的作用     由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象.在Android平台,一个进程通常不能访问另一个进程的内存空 ...

  3. Vue.2.0.5-模板语法

    Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  4. lua对模块接口扩展的一种方法

    module lua中模块的实现,对于使用者来说就是一个库,引用此库后,可以调用库中实现的任意函数. 使用库,可以将一类功能相关的接口做封装,并提供开放接口. 参考: http://blog.codi ...

  5. 各种设备的CSS3 MediaQuery整理及爽歪歪写法

    链接:http://dwz.cn/1gZQ06 ------------------------------------------------------ 备注:内容未测试过,转载的,留着备用. - ...

  6. 让show parameter显示隐含参数(12C)

    1.创建视图show_hidden_v$parameter create or replace view show_hidden_v$parameter (inst_id,NUM , NAME , T ...

  7. Java基础之写文件——在通道写入过程中的缓冲区状态(BufferStateTrace)

    控制台程序,在Junk目录中将字符串“Garbage in, garbage out\n”写入到名为charData.txt的文件中. import static java.nio.file.Stan ...

  8. SqlServer:传递超长字符串参数时,参数被自动换行。

    declare @ids nvarchar(max); set @ids=N'5936593066,5936556893,59366 00375,5936594808,59 36624757,5936 ...

  9. 链表操作,空间复杂度要求为O(1)

    对于O(1)的空间复杂度要求,不能对链表进行复制等操作,双指针法对处理该类问题比较有效. 同时由于链表头结点的特殊性,可以考虑引入一个空的头结点来辅助操作.

  10. java BigInteger

    用Java来处理高精度问题,相信对很多ACMer来说都是一件很happy的事,简单易懂.用Java刷了一些题,感觉Java还不错,在处理高精度和进制转换中,调用库函数的来处理.下面是写的一些Java中 ...