- 浏览: 51209 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhuzhuzhu222:
好 文章 顶下
Servlet+AJAX实现数据处理显示 -
hareamao:
if the th thread finishes befor ...
线程学习一,wait和notify实现简单的同步 -
GreatNeyo:
xiaolongfeixiang 写道请问你的"co ...
数据库缓冲池在tomcat6.0中的配置 -
xiaolongfeixiang:
请问你的"com.microsoft.sqlserv ...
数据库缓冲池在tomcat6.0中的配置
/* 生产者-消费者的问题,对象有学生,家长,银行,ATM取款机 * 实现,学生在学校用钱,钱用光了用银行卡去ATM取款,卡上有钱时把钱取出来消费,卡上没有钱时学生打电话通知家长,家长到银行存钱, * 银行同步把存入的钱反映到银行卡上,家长通知学生钱已经打过去了,学生接到家长的通知后,就去ATM机取钱。钱取到后,学生就去消费, * 当钱用完时,学生就 通知家长 去存钱。 * 对象有:学生,家长,银行(包括银行卡、ATM机) */ package threadTest; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Administrator */ public class ProducerCustomer { static class Bank { static double money = 0; public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } } Bank ban = new Bank();//加同步锁的对象 class Student implements Runnable{ public void run(){ synchronized(ban){ while(true){ while(ban.getMoney() > 0){ try { System.out.println("学生被告知钱已经打了,学生去取钱消费"); Thread.sleep(2000); moneyUsering(); moneyUserOut(); } catch (InterruptedException ex) { Logger.getLogger(ProducerCustomer.class.getName()).log(Level.SEVERE, null, ex); } } while(ban.getMoney()==0){ moneyUserOut(); } } } } public void moneyUsering(){ while(ban.getMoney() !=0){ System.out.println("卡里还有"+ban.getMoney()+"钱"); double newMoney = ban.getMoney()-100; ban.setMoney(newMoney); try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(ProducerCustomer.class.getName()).log(Level.SEVERE, null, ex); } } } public void moneyUserOut(){ while(ban.getMoney() == 0){ System.out.println("学生发现钱花光了,通知家长去打钱"+ban.getMoney()); ban.notify();//钱用光时,通知家长线程解锁 try { System.out.println("等待家长打钱"); Thread.sleep(3000); ban.wait();//当前线程进入阻塞状态 System.out.println("--------"); } catch (InterruptedException ex) { Logger.getLogger(ProducerCustomer.class.getName()).log(Level.SEVERE, null, ex); } } } } class Parents implements Runnable{ public void run(){ synchronized(ban){ while(true){ while(ban.getMoney() == 0){ ban.setMoney(500); System.out.println("家长去银行存入了500元钱"+ban.getMoney()); try { Thread.sleep(2000); } catch (InterruptedException ex) { Logger.getLogger(ProducerCustomer.class.getName()).log(Level.SEVERE, null, ex); } System.out.println("家长通知学生钱已经存进去了,等待学生通知要钱"); ban.notify();//解锁学生线程 try { ban.wait();//当前线程进入等待状态 } catch (InterruptedException ex) { Logger.getLogger(ProducerCustomer.class.getName()).log(Level.SEVERE, null, ex); } } } } } } public static void main(String[] args) { ProducerCustomer pc = new ProducerCustomer(); Student stu = pc.new Student(); Parents par = pc.new Parents(); Thread thStu = new Thread(stu); Thread thPar = new Thread(par); thStu.start(); thPar.start(); } }
发表评论
-
线程学习二,ReentrantLock.Lock实现线程互斥
2010-07-26 12:57 890/* ReentrantLock.Lock实现线程互斥 ... -
线程学习一,wait和notify实现简单的同步
2010-07-26 10:56 901/* * 实现一个简单的wait-notify的线程同步问题 ... -
一阶段-twentithWork-数据库操作
2009-12-02 17:26 900/* 在任意数据库中建立表 userinfo 包含字段 Use ... -
一阶段-sevenWork-定义一个名为Vehicles(交通工具)的基类
2009-12-02 17:22 1786/* 定义一个名为Vehicles(交通工具)的基类,该类中应 ... -
一阶段-nineteenthWork-数据库操作
2009-12-02 17:16 626/* 在任意数据库中建立表 userinfo 包含字段 Use ... -
一阶段-fourteenWork-六-使用Random类模拟摇色子游戏
2009-12-02 17:11 1415/* 六.使用Random类模拟摇色子游戏.共5粒色子,分别显 ... -
一阶段-fourteenWork-5-利用Random类
2009-12-02 17:08 745/* 五.利用Random类,随机生成一个int 随机数,lo ... -
一阶段-fourteenWork-3-使用Calendar类
2009-12-02 17:06 888/* 三.使用Calendar类,编写程序求出你的出生的那一天 ... -
一阶段-fourteenWork-2-使用Date的Date(int year, int month, int date) 构造方法
2009-12-02 17:04 1169/* 二,使用Date的Date(int year, int ... -
一阶段-fourteenWork-1-Date类
2009-12-02 17:02 757/* 一.使用Date类求获取当前日期,分别使用下以下格式打印 ... -
一阶段-fourteenWork-4-Calendar类
2009-12-02 17:01 837/* 四. 使用Calendar类,打印出当前月的日历表,效果 ... -
一阶段-TwelveThWork-1-回文串
2009-12-02 16:58 703/* 练习内容一:回文串 编写程序CheckPalindro ... -
一阶段-TwelveThWork-2-随机整数
2009-12-02 14:03 837/* 练习内容二:猜数字 编写程序Guess,随机地产生一个 ... -
一阶段-SixteenthWork-读写文件
2009-12-02 12:40 788/* 在F盘下建立一个名为“学生成绩单”的目录,在里面新建一个 ... -
一阶段-SeventeenWork-4-读取txt文件
2009-12-02 12:34 849/* 4、接收两个命令行参数,用来代表用户名以及密码!判断是否 ... -
一阶段-SeventeenWork-3-用户和密码信息保存到test.txt文件中
2009-12-02 12:33 955/* * 3、接收命令行参数输入用户名/密码,并将用户和密码 ... -
一阶段-FifteenthWork-3-HashMap对象
2009-12-02 12:30 892/* 3. 创建一个HashMap对象,并在其中添加一些学员的 ... -
一阶段-FifteenthWork-2-使用ArrayList
2009-12-02 11:39 919/* 2. 编写一个程序,使用ArrayList存储客户的邮 ... -
一阶段-EighthWork-1-字符流+缓冲流
2009-12-02 11:35 970/* 定义一个宠物类(Pet),它有两个方法:叫cry(),吃 ... -
一阶段-EighteenthWork-2-数据库操作
2009-12-02 11:30 825/* 二.在SQL Server 2005中附加student ...
相关推荐
使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)
使用Java多线程的wait和notify方法实现最简单的生产者消费者模式
举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待消费(不为空)。相应的,消费者可以通知生产者可以开始生成更多的数据,...
生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。
生产者消费者详解wait():执行该方法的线程对象,释放同步锁,JVM会把该线程放到等待池中,等待其他线程唤醒该线程 notify():执行该方法的线程唤醒在等待池中等待的任意一个线程,把线程转到锁池中等待(注意锁池和...
//下面的消费者类对象和生产者类对象所操作的是同一个同步堆栈对象 Producer p1 = new Producer(stack,ce); new Thread(p1).start();//生产者线程启动 Consumer c1 = new Consumer(stack,ce); new Thread(c1)....
一、重点知识 isDaemon 判断是否为守护线程。...如果没有线程处于wait状态,调用notify此时是一个空唤醒 stringBuffer中的同步方法,都是非静态的,因为共用一个this锁就可以了,线程进去调用他的一个方法
我们将使用Python线程来解决Python中的生产者—消费者问题。这个问题完全不像他们在学校中说的那么难。 如果你对生产者—消费者问题有了解,看这篇博客会更有意义。 为什么要关心生产者—消费者问题: 可以帮你更好...
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者...
多线程实例 生产者、消费者有讲解 下面是其中一小部分代码 public synchronized void putShareChar(char c) { // 通知消费者已经生产,可以消费 if (isProduced) { // 如果产品还未消费,则生产者等待 try { ...
java模拟实现PV操作 利用线程的wait和notify方法实现PV操作实现生产者与消费者问题
三个线程顺序打印问题2.1.1 题目2.1.2 题目分析2.1.3 我的答案2.2 生产者消费者问题2.2.1 题目2.2.2 题目分析2.2.3 我的答案 源码地址:https://github.com/nieandsun/concurrent-study.git 1 wait、notify、...
创建一个顾客线程(消费者):告知老板要的包子的种类和数量,调用wait方法,放弃cpu的执行,进入到WAITING状态(无限等待) 创建一个老板线程(生产者):花了5秒做包子,做好包子之后,调用notify方法,唤醒顾客吃包子 注意: ...
生产者和消费者是一个十分经典的多线程协作模式 **常见方法:** - void wait() 当前线程等待,直到被其他线程唤醒 - void notify() 随机唤醒单个线程 - void notifyAll() 唤醒所有线程
本文实例讲述了python条件变量之生产者与消费者操作。分享给大家供大家参考,具体如下: 互斥锁是最简单的线程同步机制,面对复杂线程同步问题,Python还提供了Condition对象。Condition被称为条件变量,除了提供与...
1.notify的使用 2. wait的使用 3. linux系统下的开发 4.多线程通信 5. 生产者和消费者模式
通过生产者消费者模型理解等待唤醒机制.mp4 Condition的使用及原理解析.mp4 使用Condition重写waitnotify案例并实现一个有界队列.mp4 深入解析Condition源码.mp4 实战:简易数据连接池.mp4 线程之间通信之join应用与...
面试高级开发的期间整理的面试题目,记录我面试遇到过的并发题目以及答案 目录 并发 常说的并发问题是哪些;资源竞争、死锁、事务、可见性 ...实现一个阻塞队列(用Condition写生产者与消费者就)?BlockingQueue
Day 22 Author:ScorpioDong 1. 多线程 1.1 WAITING(无限等待) 当某一线程被执行wait()方法,需要等待其他线程...现在存在两个完全无关的线程,生产者和消费者,但是商品会作为他们两者之间的共享资源。 生产者和消费
典型实例有生产者和消费者,本文也通过实例来分析线程等待唤醒机制。 1、相关API介绍 public final void notify() 唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象上等待,则会任意选择唤醒...