java多线程中的生产者与消费者之等待唤醒机制@Version2.0
二、生产者消费者模式的学生类成员变量生产与消费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的更多相关文章
- java多线程中的生产者与消费者之等待唤醒机制@Version1.0
		一.生产者消费者模式的学生类成员变量生产与消费demo,第一版1.等待唤醒: Object类中提供了三个方法: wait():等待 notify():唤醒单个线程 notify ... 
- Android(java)学习笔记71:生产者和消费者之等待唤醒机制
		1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ... 
- Android(java)学习笔记11:生产者和消费者之等待唤醒机制
		1. 首先我们根据梳理我们之前Android(java)学习笔记70中,关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 下面 ... 
- java ->多线程_线程同步、死锁、等待唤醒机制
		线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. l 我们通过一个案例,演示线 ... 
- java多线程(死锁,lock接口,等待唤醒机制)
		一.Lock接口 常用方法 Lock提供了一个更加面对对象的锁,在该锁中提供了更多的操作锁的功能. 使用Lock接口,以及其中的lock()方法和unlock()方法替代同步,对电影院卖票案例中Tic ... 
- Java多线程设计模式(2)生产者与消费者模式
		1 Producer-Consumer Pattern Producer-Consumer Pattern主要就是在生产者与消费者之间建立一个“桥梁参与者”,用来解决生产者线程与消费者线程之间速度的不 ... 
- Java多线程与并发——生产者与消费者应用案例
		多线程的开发中有一个最经典的操作案例,就是生产者-消费者,生产者不断生产产品,消费者不断取走产品. package com.vince; /** * 生产者与消费者案例 * @author Admin ... 
- java多线程之多生产者-多消费者
		多生产者和多消费者是线程通信的经典案例,但是和生产者-消费者相比更为复杂,而且可能会产生程序假死. public class Product { private MyStack myStack; pu ... 
- Linux内核中实现生产者与消费者(避免无效唤醒)【转】
		转自:http://blog.csdn.net/crazycoder8848/article/details/42581399 本文关注的重点是,避免内核线程的无效唤醒,并且主要是关注消费者线程的设计 ... 
随机推荐
- java实现读取文件内容(不同类型)
			在一些项目中大量的数据经常需要从文件中读取,例如xml文件,txt文件,csv文件 1.读取本地的xml文件,需要注意对应的路径 //读取xml文件,xmlFile为读取文件的路径 DocumentB ... 
- php 表单提交
			<?php header("Content-Type:text/html; charset=utf8"); class config{ public static funct ... 
- 关于开源授权协议 GPL 和 LGPL
			GPL 是 GNU General Public License (GNU 通用公共许可证)的缩写形式:LGPL 是 GNU Lesser General Public License (GNU 宽通 ... 
- Git和SSH协议
			SSH(安全外壳协议)为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定:SSH为建立在应用层和传输层基础上的安全协议.SSH是目前较可靠, ... 
- iOS UILabel根据文字获取高度及UITableCell动态获取高度(以截取快递信息为例)
			#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ... 
- MySQL Server 5.6 配置文件my.ini 以及windows上mysql表名区分大小写
			MySQL Server 5.6的配置文件my.ini的位置跟以往有所不同: 我的是在:C:\ProgramData\MySQL\MySQL Server 5.6\my.ini 前两天导sql 导完之 ... 
- Newtonsoft.Json的使用
			JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.和 XML 一样,JSON 也是基于纯文本的数据格式 ... 
- 数据库调优过程(二):找到IO不存在问题,而是sqlserver单表写入IO瓶颈
			物理机上测试IO是否为瓶颈: 使用一个死循环insert into测试数据库最大写入速度: use [iTest]; declare @index int; ; begin ; INSERT into ... 
- SQL 过滤 having
			select * from emp --having 对分组之后使用 --输出部门号 和 部门的平均工资 并且 平均工资 > 2000 select deptno, avg(sal) as &q ... 
- jsp eclipse 创建jsp项目
			选择File菜单 File->new->Other... 选择Dynamic Web Project项目->Next 写入项目->Finish 在WebContent鼠标右键- ... 
