- 浏览: 53203 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 932/* ReentrantLock.Lock实现线程互斥 ... -
线程学习一,wait和notify实现简单的同步
2010-07-26 10:56 943/* * 实现一个简单的wait-notify的线程同步问题 ... -
一阶段-twentithWork-数据库操作
2009-12-02 17:26 926/* 在任意数据库中建立表 userinfo 包含字段 Use ... -
一阶段-sevenWork-定义一个名为Vehicles(交通工具)的基类
2009-12-02 17:22 1839/* 定义一个名为Vehicles(交通工具)的基类,该类中应 ... -
一阶段-nineteenthWork-数据库操作
2009-12-02 17:16 690/* 在任意数据库中建立表 userinfo 包含字段 Use ... -
一阶段-fourteenWork-六-使用Random类模拟摇色子游戏
2009-12-02 17:11 1444/* 六.使用Random类模拟摇色子游戏.共5粒色子,分别显 ... -
一阶段-fourteenWork-5-利用Random类
2009-12-02 17:08 783/* 五.利用Random类,随机生成一个int 随机数,lo ... -
一阶段-fourteenWork-3-使用Calendar类
2009-12-02 17:06 918/* 三.使用Calendar类,编写程序求出你的出生的那一天 ... -
一阶段-fourteenWork-2-使用Date的Date(int year, int month, int date) 构造方法
2009-12-02 17:04 1208/* 二,使用Date的Date(int year, int ... -
一阶段-fourteenWork-1-Date类
2009-12-02 17:02 826/* 一.使用Date类求获取当前日期,分别使用下以下格式打印 ... -
一阶段-fourteenWork-4-Calendar类
2009-12-02 17:01 879/* 四. 使用Calendar类,打印出当前月的日历表,效果 ... -
一阶段-TwelveThWork-1-回文串
2009-12-02 16:58 743/* 练习内容一:回文串 编写程序CheckPalindro ... -
一阶段-TwelveThWork-2-随机整数
2009-12-02 14:03 880/* 练习内容二:猜数字 编写程序Guess,随机地产生一个 ... -
一阶段-SixteenthWork-读写文件
2009-12-02 12:40 836/* 在F盘下建立一个名为“学生成绩单”的目录,在里面新建一个 ... -
一阶段-SeventeenWork-4-读取txt文件
2009-12-02 12:34 895/* 4、接收两个命令行参数,用来代表用户名以及密码!判断是否 ... -
一阶段-SeventeenWork-3-用户和密码信息保存到test.txt文件中
2009-12-02 12:33 997/* * 3、接收命令行参数输入用户名/密码,并将用户和密码 ... -
一阶段-FifteenthWork-3-HashMap对象
2009-12-02 12:30 960/* 3. 创建一个HashMap对象,并在其中添加一些学员的 ... -
一阶段-FifteenthWork-2-使用ArrayList
2009-12-02 11:39 954/* 2. 编写一个程序,使用ArrayList存储客户的邮 ... -
一阶段-EighthWork-1-字符流+缓冲流
2009-12-02 11:35 1017/* 定义一个宠物类(Pet),它有两个方法:叫cry(),吃 ... -
一阶段-EighteenthWork-2-数据库操作
2009-12-02 11:30 856/* 二.在SQL Server 2005中附加student ...
相关推荐
在`JThreadSynch`这个压缩包文件中,我们可以预见到包含的Java源代码将展示以上的一种或多种机制,通过具体的示例代码来解释和实现生产者消费者问题的线程同步和互斥。通过学习和理解这个示例,开发者可以更好地掌握...
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
总的来说,解决生产者-消费者问题需要深入理解线程同步原理,并结合具体的需求进行设计和实现。这个过程不仅锻炼了编程能力,也对并发编程的理解有着重要的实践意义。在实际项目中,这样的并发控制技术广泛应用在...
在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
总的来说,"线程同步生产者消费者问题"是理解和掌握多线程编程的关键案例。通过这个案例,我们可以深入理解线程间的通信和协作,以及如何有效地使用线程同步机制来管理共享资源。对于开发者来说,掌握这些概念和技巧...
在C++编程中,多线程通信是一种关键的...生产者-消费者模式是一种常用的线程同步策略,能够有效地解决数据生产和消费的问题。在实际编程中,理解并熟练掌握这些概念和技术,对于提升C++多线程程序的设计能力至关重要。
生产者消费者问题是多线程编程中的一个经典模型,用于演示如何在并发环境中通过共享资源进行协作。在这个模型中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。问题的关键在于如何保证生产者不会在无处...
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...
在Java或者其他支持多线程的编程语言中,实现消费者-生产者模型通常会用到线程安全的数据结构(如阻塞队列)和同步原语(如wait、notify和notifyAll)。在这个示例中,可能包含一个队列用于存储生产者生成的数据,...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者(Producer),负责生产数据或物品;另一个是消费者(Consumer),负责消耗这些数据或物品。在这...
生产者消费者问题是多线程编程中的经典案例,用于演示如何通过同步机制来协调不同线程间的协作。这个问题的核心在于一个共享资源池,生产者线程负责填充资源,而消费者线程负责消耗这些资源,两者之间需要协调以避免...
生产者与消费者问题是经典的线程同步问题之一,它模拟了两个不同角色(生产者和消费者)对共享资源的访问。在这个问题中,生产者负责生成数据并放入一个有限的缓冲区,而消费者则从这个缓冲区取出数据进行消费。为了...
总之,基于Java线程机制研究生产者-消费者问题,通过实际编码演示了线程创建和管理、线程同步机制的应用,以及如何使用Java提供的数据结构来解决实际问题。这项研究不仅具有理论意义,更具有指导学生实践的意义,...
在实际开发中,除了使用synchronized和wait/notify外,还可以利用Java并发库提供的高级工具,如`ExecutorService`,`CountDownLatch`,`CyclicBarrier`等,来更优雅地实现生产者消费者模型。例如,可以使用`...
【标题与描述】所涉及的知识点是“生产者-消费者问题”,这是一个经典的多线程同步问题,常见于操作系统课程设计中。在这个问题中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。多线程同步是解决这类...
8. **死锁和饥饿**:在实现多线程生产者消费者模型时,必须警惕可能出现的死锁和饥饿问题。死锁是两个或更多线程相互等待对方释放资源导致的僵局,而饥饿则是指某一线程因为资源分配不公平而无法获得执行的机会。...
生产者-消费者问题是多线程编程中的一个经典模型,用于演示线程间的协作和同步。这个模型描述了两个角色——生产者和消费者,它们共享一个有限的缓冲区。生产者负责创建产品并放入缓冲区,而消费者则从缓冲区取出...
5. **wait/notify机制**:生产者和消费者线程通过`wait()`和`notify()`方法进行通信。当队列满时,生产者调用`wait()`进入等待状态;队列有空位时,消费者完成消费后调用`notify()`唤醒等待的生产者。同样,队列为空...