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();
        }
    }
}

java线程学习第一天__低配版的卖面包机的更多相关文章

  1. 【Java】利用注解和反射实现一个"低配版"的依赖注入

    在Spring中,我们可以通过 @Autowired注解的方式为一个方法中注入参数,那么这种方法背后到底发生了什么呢,这篇文章将讲述如何用Java的注解和反射实现一个“低配版”的依赖注入. 下面是我们 ...

  2. Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD

    随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了.一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛.即便你的项目少,每次花费在发布上面 ...

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

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

  4. 基于canvas和web audio实现低配版MikuTap

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

  5. 【JavaScript】论一个低配版Web实时通信库是如何实现的之二( EventSource篇)

    前情提要 「 话说上回说到!那WebSocket大侠,巧借http之内力,破了敌阵的双工鸳鸯锁,终于突出重围. 然而玄难未了,此时web森林中飞出一只银头红缨枪,划破夜色. "莫非!?&qu ...

  6. 搭建react项目(低配版)

    react项目低配版,可作为react相关测试的基础环境,方便快速进行测试. git clone git@github.com:whosMeya/simple-react-app.git git ch ...

  7. java 线程学习

    转载:详见处http://lavasoft.blog.51cto.com/62575/27069   Java多线程编程总结   下面是Java线程系列博文的一个编目:   Java线程:概念与原理 ...

  8. Java线程学习详解

    线程基础 1. 线程的生命周期 1.1 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态.它保持这个状态直到程序 start() 这个线程. 1 ...

  9. java线程学习——汉堡销售问题

    汉堡店中有一个负责做汉堡的厨师,一个负责销售的营业员,用java线程表示他们的营业过程: 问题原型就是生产者与消费者的问题. 首先定义一个汉堡包箱子类与几个相关的变量类: public class H ...

随机推荐

  1. 码农很忙代理IP系统V1.0版本上线

    码农很忙代理IP系统V1.0版本上线 经过为期一个月的重写和测试,新版本的码农很忙代理IP系统已于今日正式上线.新版本拥有更精准的匿名类型识别和更高效的验证调度算法. 新版本仍旧采用ASP.NET B ...

  2. 关于.Net的知识和相关书籍

    a. DBCC DROPCLEANBUFFERS 清空缓存信息b. DBCC FREEPROCCACHE 从过程缓存中删除所有元素2. 引用两个和尚打水的故事,说明平时要注重积累,只有量变达到了才会形 ...

  3. 内置函数 -- filter 和 map

    参考地址:http://www.cnblogs.com/sesshoumaru/p/6000788.html 英文文档: filter(function, iterable) Construct an ...

  4. swift 之归档和解归档

    swift 之归档和解归档 数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储.coredata存储.UserDefault存储.归档.p ...

  5. Android 进程常驻、进程守护、进程保活技术的总结

    转载自:http://blog.csdn.net/marswin89/article/details/50917098 这是一个轻量级的库,配置几行代码,就可以实现在Android上实现进程常驻,也就 ...

  6. Ubuntu 卸载cario-dock

    偶然间听说别人用dock 可以把ubuntu美化,结果就装了个cairo-dock .结果是苹果mac的风格.不是很喜欢.于是就卸载,卸载过程中.发行卸载不掉. 尝试了很多方法. sudo apt-g ...

  7. ip2long的用法

    ip2long:将IPv4的ip地址(以小数点分隔形式)转换为int Description int ip2long ( string ip_address ) 如果ip地址非法,返回FALSE(PH ...

  8. firebug中的console常用的方法

    firebug中的console常用的方法 1.console.log("Hello!"); --------------------显示基本信息 2.console.info(& ...

  9. Naive Bayes (NB Model) 初识

    1,Bayes定理 P(A,B)=P(A|B)P(B); P(A,B)=P(B|A)P(A); P(A|B)=P(B|A)P(A)/P(B);    贝叶斯定理变形 2,概率图模型 2.1  定义 概 ...

  10. freemarker写select组件(二)

    freemarker写select组件 1.宏定义 <#macro select id datas value=""> <select id="${id ...