java线程学习第一天__低配版的卖面包机
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线程学习第一天__低配版的卖面包机的更多相关文章
- 【Java】利用注解和反射实现一个"低配版"的依赖注入
在Spring中,我们可以通过 @Autowired注解的方式为一个方法中注入参数,那么这种方法背后到底发生了什么呢,这篇文章将讲述如何用Java的注解和反射实现一个“低配版”的依赖注入. 下面是我们 ...
- Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD
随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了.一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛.即便你的项目少,每次花费在发布上面 ...
- 【Node/JavaScript】论一个低配版Web实时通信库是如何实现的( WebSocket篇)
引论 simple-socket是我写的一个"低配版"的Web实时通信工具(相对于Socket.io),在参考了相关源码和资料的基础上,实现了前后端实时互通的基本功能 选用了Web ...
- 基于canvas和web audio实现低配版MikuTap
导言 最近发掘了一个特别happy的网页小游戏--MikuTap.打开之后沉迷了一下午,导致开发工作没做完差点就要删库跑路了,还好boss瞥了我一眼就没下文了.于是第二天我就继续沉迷,随着一阵抽搐,这 ...
- 【JavaScript】论一个低配版Web实时通信库是如何实现的之二( EventSource篇)
前情提要 「 话说上回说到!那WebSocket大侠,巧借http之内力,破了敌阵的双工鸳鸯锁,终于突出重围. 然而玄难未了,此时web森林中飞出一只银头红缨枪,划破夜色. "莫非!?&qu ...
- 搭建react项目(低配版)
react项目低配版,可作为react相关测试的基础环境,方便快速进行测试. git clone git@github.com:whosMeya/simple-react-app.git git ch ...
- java 线程学习
转载:详见处http://lavasoft.blog.51cto.com/62575/27069 Java多线程编程总结 下面是Java线程系列博文的一个编目: Java线程:概念与原理 ...
- Java线程学习详解
线程基础 1. 线程的生命周期 1.1 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态.它保持这个状态直到程序 start() 这个线程. 1 ...
- java线程学习——汉堡销售问题
汉堡店中有一个负责做汉堡的厨师,一个负责销售的营业员,用java线程表示他们的营业过程: 问题原型就是生产者与消费者的问题. 首先定义一个汉堡包箱子类与几个相关的变量类: public class H ...
随机推荐
- SpringMvc笔记-注解
@RequestParam(value = "username", defaultValue = "haha", required = true) 有四个参数 ...
- C语言_简单了解一下typedef
作为一名PHPer,了解一下C还是有必要的,只是做一个简单的了解,因为并没有做开发C的想法. 关于typedef的详细说明,网上搜过了很多帖子,这篇算是最详细的了:http://blog.csdn.n ...
- Docker镜像的构成__Dockerfile
相比docker commit来说,Dockerfile的方法会更加自动化,更加方便快捷,而且功能也更强大.拿构建Nginx容器举例. 先创建一个目录 mkdir /opt/docker-file 进 ...
- Java数字签名——RSA算法
数字签名:带有密钥(公钥,私钥)的消息摘要算法. 验证数据的完整性,认证数据的来源,抗否性 OSI参考模型 私钥签名,公钥验证 签名算法:RSA,DSA,ECDSA 算法1 :RSA MD,SHA两类 ...
- 支持ipV6和ipV4的客户端编程
ipv4和ipv6在socket初始化的时候是不一样的. ipv4 socket初始化: int CClient::InitSocket(CString strIP, short portNum) { ...
- 【2016北京集训测试赛(十六)】 River (最大流)
Description Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...
- SpringBoot,Security4, redis共享session,分布式SESSION并发控制,同账号只能登录一次
由于集成了spring session ,redis 共享session,导致SpringSecurity单节点的session并发控制失效, springSession 号称 无缝整合httpses ...
- hadoop/storm以及hive/hbase/pig区别整理
STORM与HADOOP的比较 对于一堆时刻在增长的数据,如果要统计,可以采取什么方法呢? 等数据增长到一定程度的时候,跑一个统计程序进行统计.适用于实时性要求不高的场景.如将数据导到HDFS,再运行 ...
- Kettle参数化配置
Kettle参数化配置 在做系统化的Kettle实现方案,我们基本要定义一些不变的参数,在整个生命周期中使用,或者设置一些特定的参数,在一些特定的JOB中使用.参数化配置有利用我们Kettle实现规范 ...
- 重温.NET下Assembly的加载过程
最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后发现,并没能解决我的问题,有些点写的不是特别详 ...