多线程---和尚吃馒头问题
在项目中,经常用到一种设计模式----单例模式,下面举一个小案例,说明线程安全的单例模式在多线程中的应用,以供学习参考:
和尚吃馒头:
100个馒头,30个和尚,每个和尚最少吃一个馒头,最多不超过4个馒头,保证上述条件的情况下,
尽快将馒头吃了!
要求是严格单例模式实现篮子类(存放馒头的容器)。
- <span style="font-size:18px;">package java.thread;
- /**
- *
- */
- public class MantouDemo {
- public static void main(String[] args) {
- for(int i = 0 ; i < Box.uneatedMonks ; i ++){
- new Monk("tom" + i).start();
- }
- }
- }
- //篮子
- class Box{
- private static Box instance = null ;
- private static Object lock = new Object();
- //馒头总数
- private int COUNT = 100 ;
- //没吃馒头的和尚数量
- public static int uneatedMonks = 30 ;
- public static Box getInstance(){
- if(instance != null){
- return instance ;
- }
- synchronized (lock){
- if(instance == null){
- instance = new Box();
- }
- return instance ;
- }
- }
- private Box(){
- }
- //获取馒头
- public int getMantou(Monk monk){
- //1.是否还有可吃馒头
- if(COUNT == 0){
- return 0 ;
- }
- //2.和尚是否吃饱了
- if(monk.getCount() == Monk.MAX){
- return 0 ;
- }
- //3.还有多余的馒头
- if(COUNT > uneatedMonks){
- int tmp = COUNT ;
- COUNT -- ;
- //和尚是否是第一次吃馒头
- if(monk.getCount() == 0){
- uneatedMonks -- ;
- }
- return tmp ;
- }
- //没有多余的馒头
- else{
- if(monk.getCount() == 0){
- int tmp = COUNT;
- COUNT--;
- uneatedMonks--;
- return tmp ;
- }
- }
- return 0 ;
- }
- }
- //和尚
- class Monk extends Thread{
- public static int MAX = 4 ;
- public static int MIN = 1 ;
- //和尚吃了馒头的数量
- private int count = 0 ;
- public int getCount() {
- return count;
- }
- public void setCount(int count) {
- this.count = count;
- }
- private String monkName ;
- public Monk(String monkName) {
- this.monkName = monkName ;
- }
- public void run() {
- Box box = Box.getInstance();
- while(true){
- int mantouNo = box.getMantou(this) ;
- if(mantouNo != 0){
- count ++ ;
- }
- else{
- break ;
- }
- yield();
- }
- System.out.println(monkName + " : " + count );
- }
- }
- </span>
多线程---和尚吃馒头问题相关推荐
- 多线程案例----严格单例模式----和尚吃馒头问题
在项目中,经常用到一种设计模式----单例模式,下面举一个小案例,说明线程安全的单例模式在多线程中的应用,以供学习参考: 和尚吃馒头: 100个馒头,30个和尚,每个和尚最少吃一个馒头,最多不超过4个 ...
- Java 多线程实现和尚吃馒头的问题
和尚吃馒头问题 30和尚,100个馒头,每个和尚最多吃4个馒头,最少吃1个馒头,一次只能吃1个馒头. 满足上述条件,尽快吃光馒头. 注意 合适没吃一个馒头之后要 yield(),不然他会连续吃满4个馒 ...
- 【代码练习4】利用多线程处理和尚吃馒头问题
和尚吃馒头 30个和尚,100个馒头,每个和尚至少吃一个馒头,最多不过4个馒头. 满足上述条件下,尽快将馒头吃完. 思路:开启多线程,以最快的速度抢占馒头,首先抢到4个馒头的线程就停止掉:当剩余的馒头 ...
- Java多线程同步问题(和尚吃馒头问题)
创建一个和尚类 public class Basket {private int count = 100 ;//和尚数量 ==没吃馒头的和尚数量private int numMonks = 30 ;p ...
- 和尚吃馒头c语言程序,(八十一)约瑟夫环/鲁智深吃馒头
问题:99个人,99个馒头,来了一个鲁智深,找个位置把他放进去,然后每逢五的人,吃一个馒头,并且退场,最后让他无法吃. 代码: #include int main() { using namespac ...
- java 大数据(多线程)和尚分馒头 整理
Box 箱子类.Monk和尚类.App测试类 Box 箱子类 package com.xc.thread.monk;/*** 馒头箱子* @author Administrator**/ public ...
- 有一个和尚负责做馒头,做好30个其它三个和尚就可以吃馒头, *当馒头吃完了,第一个和尚就再做30个馒头 生产消费
package ;import java.util.ArrayList; import java.util.List;/** * Created by dell on 2017/5/4. * 有一个和 ...
- 数组的趣味应用-鲁智深吃馒头
鲁智深吃馒头 据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头.智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成 ...
- C语言趣味题——鲁智深吃馒头问题
题目:鲁智深吃馒头 据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头,智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说,从我开始报数( ...
最新文章
- python nginx部署_Python 应用 uWSGI + Nginx 部署
- mysql半同步复制问题排查
- mciSendString用法
- 为什么优秀的程序员都写博客?谈谈我都是如何写作的
- 职高学的计算机单招考试能换专业吗,2020年湖南中专生单招考大专能换专业吗?...
- PowerDesigner16.5安装
- mysql建立从库同时备份_mysql主从库配置读写分离以及备份
- python大神的成长之路_我的Python成长之路
- java在线编辑器_微软开源在线代码编辑器——Monaco Editor
- thinkphp mysql 中文 问号_thinkphp分页中文参数乱码解决
- Matlab将数字数组转换为字符数组(用于标明点号)
- PC端编辑 但能在PC端模拟移动端预览的富文本编辑器
- mfc mfc100ud.dll丢失问题
- python命令行tab实例小妙招
- 【SQLServer】将Job运行结果发送电子邮件通知用户
- 计算机英语写作题范文,2018年6月英语四级考试写作范文:人与电脑
- Mysql中WhereIn和Join的性能比对
- 系统从win7更新到win10没有声音(扬声器一直显示未插入)
- 从Realme GT的安兔兔跑分开始谈起
- 使用TexturePacker命令行的一个坑
热门文章
- Jenkins之构建触发器(Build Triggers)
- Mac OS X 10.7.5 Lion 系统安装 U 盘制作
- Numpy API 速查表
- java 解密pdf_Java 加密和解密 PDF
- 了解C语言中的pipe()系统调用
- mysql左链表右链表区别_MySql链表语句--博客园老牛大讲堂
- 20180402-B · US Tuition Costs · ggplot2, 条线图 柱状图 · R 语言数据可视化 案例 源码
- Accepted Necklace HDU - 2660
- newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解
- unity游戏存档playerprefs