二、生产者消费者模式的学生类成员变量生产与消费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. java实现读取文件内容(不同类型)

    在一些项目中大量的数据经常需要从文件中读取,例如xml文件,txt文件,csv文件 1.读取本地的xml文件,需要注意对应的路径 //读取xml文件,xmlFile为读取文件的路径 DocumentB ...

  2. php 表单提交

    <?php header("Content-Type:text/html; charset=utf8"); class config{ public static funct ...

  3. 关于开源授权协议 GPL 和 LGPL

    GPL 是 GNU General Public License (GNU 通用公共许可证)的缩写形式:LGPL 是 GNU Lesser General Public License (GNU 宽通 ...

  4. Git和SSH协议

    SSH(安全外壳协议)为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定:SSH为建立在应用层和传输层基础上的安全协议.SSH是目前较可靠, ...

  5. iOS UILabel根据文字获取高度及UITableCell动态获取高度(以截取快递信息为例)

    #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

  6. MySQL Server 5.6 配置文件my.ini 以及windows上mysql表名区分大小写

    MySQL Server 5.6的配置文件my.ini的位置跟以往有所不同: 我的是在:C:\ProgramData\MySQL\MySQL Server 5.6\my.ini 前两天导sql 导完之 ...

  7. Newtonsoft.Json的使用

    JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.和 XML 一样,JSON 也是基于纯文本的数据格式 ...

  8. 数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈

    物理机上测试IO是否为瓶颈: 使用一个死循环insert into测试数据库最大写入速度: use [iTest]; declare @index int; ; begin ; INSERT into ...

  9. SQL 过滤 having

    select * from emp --having 对分组之后使用 --输出部门号 和 部门的平均工资 并且 平均工资 > 2000 select deptno, avg(sal) as &q ...

  10. jsp eclipse 创建jsp项目

    选择File菜单 File->new->Other... 选择Dynamic Web Project项目->Next 写入项目->Finish 在WebContent鼠标右键- ...