二、生产者消费者模式的学生类成员变量生产与消费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. weizmann数据库

    http://www.wisdom.weizmann.ac.il/~vision/SpaceTimeActions.html

  2. centos linux安全和调优 第四十一节课

    centos  linux安全和调优    第四十一节课 上半节课 Linux安全 下半节课 Linux调优 2015-07-01linux安全和调优 [复制链接]--http://www.apele ...

  3. nginx的内存管理

    先来看内存池的实现,nginx的内存池实现的非常简单. 这里内存池的一些图表可以看老朱同学的slides : http://blog.zhuzhaoyuan.com/2009/09/nginx-int ...

  4. shell 判断字符串是否为数字

    本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...

  5. Winforms-GePlugin-Control-library

    Winforms-GePlugin-Control-library http://download.csdn.net/download/xm379303813/4247029

  6. Linux服务和运行级别科普

    在Linux中,列出所有的系统服务 chkconfig --list 输入以上命令可以看到类似以下的结果 sysstat :关闭 :关闭 :启用 :启用 :关闭 :启用 :关闭 tcsd :关闭 :关 ...

  7. Custom IFormatProvider

    The following example shows how to write a custom IFormatProvider which you can use in methodString. ...

  8. 不等高cell搭建(二)

      一.commentView模块搭建 commentView样式分为两种     1.xib搭建界面   1.1 因为评论的样式大体上一样,我们可以用同一个xib来处理   1.2 最热评论   用 ...

  9. unresolved external symbol __report_rangecheckfailure 解决思路

    __report_rangecheckfailure  是用来检查堆栈缓存溢出的,如果编译的时候打开GS(project property-->Configuration properties- ...

  10. Swift实战-QQ在线音乐(AppleWatch版)

    1.打开项目QQMusic,然后点菜单:“File-New-Target”添加appleWatch扩展项 2.选择Swift语言,把Include Notification Scene前的勾去掉 (项 ...