package Thread;

import javax.xml.bind.ValidationEvent;

class snacks{
    private int  SaledSnacks=0;
    private int  TotalSnacksNum=10; //初始化小吃店开始有10个面包
    private int  TOTALtimeOFSALE=0;
    public synchronized boolean salesnacks() {
        if (TotalSnacksNum>0) {
            SaledSnacks++;
            TotalSnacksNum--;
            TOTALtimeOFSALE++;
            System.out.println(Thread.currentThread().getName()+"卖出一个面包");
            return true;
        }else {
            System.out.println("目前已经卖完了,需要等会儿才有");
            return false;
        }
    }
    public synchronized boolean makesnacks() {
            TotalSnacksNum++;
            TOTALtimeOFSALE+=3;
            System.out.println(Thread.currentThread().getName()+"做出一个面包");
            return true;
    }
}
class SaleSnacks extends Thread{
    private snacks Snacks=new snacks();
    public SaleSnacks(String name,snacks s) {
        super(name);
        Snacks=s;
    }

public void Validation() {
        while(Snacks.salesnacks()) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }    
        }
            if (!Snacks.salesnacks()) {
                try {
                    Thread.sleep(5000);
                    while(Snacks.salesnacks()) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                        }    
                    }
                    
                } catch (Exception e) {
                    // TODO: handle exception
                }
                
            }
        Validation();
    }
    @Override
    public void run() {
        Validation();
    }
}
class MakeSnacks extends Thread{
    private snacks Snacks=new snacks();
    public MakeSnacks(String name,snacks s) {
        super(name);
        Snacks=s;
    }
    @Override
    public void run() {
        while(Snacks.makesnacks()) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }
            
        }
    }
}

public class Thread_synchronized {
    public static void main(String[] args) throws InterruptedException {
     System.out.println("开始卖 snack!!!");
         snacks AIMSnackShop=new snacks();
         SaleSnacks sale1=new SaleSnacks("windows:A", AIMSnackShop);
         SaleSnacks sale2=new SaleSnacks("windows:B", AIMSnackShop);
         SaleSnacks sale3=new SaleSnacks("windows:C", AIMSnackShop);
         MakeSnacks makeSnacks =new MakeSnacks("Make: A", AIMSnackShop);
         sale1.start();
         sale2.start();
         sale3.start();
         makeSnacks.start();
         try {
            Thread.sleep(500000);
        } catch (IllegalThreadStateException e) {
            e.printStackTrace();
        }
    }
}

转载于:https://www.cnblogs.com/laiso/p/8544259.html

java线程学习第一天__低配版的卖面包机相关推荐

  1. java muki_基于canvas和web audio实现低配版MikuTap

    导言 最近发掘了一个特别happy的网页小游戏--MikuTap.打开之后沉迷了一下午,导致开发工作没做完差点就要删库跑路了,还好boss瞥了我一眼就没下文了.于是第二天我就继续沉迷,随着一阵抽搐,这 ...

  2. 谷歌 ARCore 就是低配版 Tango,它比苹果 ARKit 好在哪?

    [转] https://www.leiphone.com/news/201709/hioiZlgdXIj9fFex.html 雷锋网按:本文作者为 Matt Miesnieks,目前担任 6D.ai ...

  3. 大神解读:谷歌 ARCore 就是低配版 Tango,它比苹果 ARKit 好在哪?

    转自雷锋网:点击打开链接 原标题:大神解读:谷歌 ARCore 就是低配版 Tango,它比苹果 ARKit 好在哪? 雷锋网按:本文作者为 Matt Miesnieks,目前担任 6D.ai 的 C ...

  4. 项目:低配版Everything

    一.项目背景     在任何操作系统中,搜索工具都是必不可少的,不管我们多么认真的对文件进行整理,当文件数量非常多时,都可能需要我们花很长时间来找某个文件.搜索工具可以让我们从大量文件中快速找到我们所 ...

  5. 【Node.js】论一个低配版Web实时通信库是如何实现的1( WebSocket篇)

    引论 simple-socket是我写的一个"低配版"的Web实时通信工具(相对于Socket.io),在参考了相关源码和资料的基础上,实现了前后端实时互通的基本功能 选用了Web ...

  6. lga2066服务器准系统,LGA2066低配版Corei7-7740K再曝光:21WTDP换来100MHz频率

    Intel的HEDT高端处理器平台的发布时间从之前的8月份提前到了5月底,台北电脑展上就会正式公布,新一代平台插槽从目前的LGA2011升级到LGA2066,而且会有两个版本--Skylake-X架构 ...

  7. PS快捷键大法,初级低配版

    在PS中,对于初学者,我个人认为其实不用快捷键更能深刻的理解各个工具.操作之间联系和原理,但对于以后的作图修图来说,快捷键实在是装逼利器,并且确实方便快捷,能给我们的工作带来很多便捷.百度上的PS快捷 ...

  8. typescript用什么软件写_用TypeScript写了个低配版H5美图工具

    前言 最近两月在学习canvas时候,发现很多有意思的技术能力,特别是在图像处理这一领域.让我想起大学课堂教学的<数字图像处理>(冈萨雷斯 版本).但是很遗憾的是,大学上完课应付考试后全部 ...

  9. 实现一个基于 IConfiguration 的低配版 FeatureFlag

    实现一个基于 IConfiguration 的低配版 FeatureFlag Intro 在我们的应用中,可能有一些配置开关的需求,某些功能是否启用使用一个配置开关,用的时候就打开,不用的时候就关掉, ...

最新文章

  1. linux make 命令简介
  2. Kinect学习(四):提取深度数据
  3. windows上安装mysql
  4. JDK、JRE、JVM到底是什么
  5. 大型程序是如何开发的_大型小程序如何研发提效
  6. mybatis字符串转成数字_Python字符串三种格式化输出
  7. C#LeetCode刷题之#617-合并二叉树​​​​​​​​​​​​​​(Merge Two Binary Trees)
  8. 三年级开始学计算机,三年级学生初识计算机的教学心得
  9. go 的时间与时间戳计算
  10. 05-不借用第三个变量实现两个变量值互换(运算符)
  11. oracle 检查链接数,oracle连接数检查
  12. paip.提升安全性-------用户口令密码的检测与生成
  13. 牛客网-《剑指offer》-二进制中1的个数
  14. .text urlRewrite介绍
  15. 韦东山Linux嵌入式学习——硬件复习
  16. IAR软件ZigBee物联网
  17. Linux 相关基础笔记
  18. 机动车污染排放检验信息系统信息化建设目标及规范
  19. zookeeper的羊群效应
  20. VMware 安装安卓虚拟机 一步一步的手把手教学

热门文章

  1. c语言获取五子棋盘光标位置,跪求C语言五子棋悔棋部分实现
  2. mybatis注解动态sql_超全MyBatis动态SQL详解
  3. linux的网络不可达问题,我的服务器日志中的linux – (网络不可达)错误
  4. linux下c语言按q退出_在linux下C语言写了一个while循环,怎么实现按任意键退出。如何编写程序?...
  5. 安卓设置菊花动画_Android仿ios加载loading菊花图效果
  6. linux 配置jupyter远程访问
  7. 解决ubuntu中vi不能正常使用方向键与退格键的问题
  8. 惊呆了!小姐姐用图解 Python,这也太秀了吧?
  9. 推荐2个十分好用的pandas数据探索分析神器!
  10. 数据分析、机器学习必读书,李航《统计学习方法》发布算法推导视频啦!(附作业讲解)...