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 ...
随机推荐
- PHP实现水印效果(文字、图片)
第一种 <?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文字 * $size 文字大小 * $pos 水印的位置 * $color 文字的颜色 ...
- Angular @HostBinding()和@HostListener()用法
@HostBinding()和@HostListener()在自定义指令时非常有用.@HostBinding()可以为指令的宿主元素添加类.样式.属性等,而@HostListener()可以监听宿主元 ...
- 1.9 list 列表
列表是什么? list是Python中的基本数据结构之一,属于可变序列,所以前文中讲的可变序列的通用操作都适用于list. 这一节讲列表的特性吧. 特性一: 列表是包含任意对象的有序集合,同一个列表中 ...
- tox环境安装
ubuntu 下安装tox环境 1.apt-get install pip 2.pip install tox 3.git git clone https://github.com/openstack ...
- JavaScript中基本数据类型和引用数据类型的区别
1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变 ...
- Android开发之Android Context Menu
1 Creatinga上下文菜单, Todefine上下文菜单的外观和行为,推翻youractivity的上下文菜单回滚方法,onCreateContextMenu()和onContextItemSe ...
- Hi3531 SDK v2.0.8.0 安装
1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz ...
- Java中获取文件路径
Java中获取文件路径 1.实例说明 (1)得到 ClassPath的绝对URI路径 Thread.currentThread().getContextClassLoader().getResourc ...
- 安装STS报错(二)
安装STS报错 1.启动时报错 2.报错原因 3.处理办法
- Linux显示用户注册名
Linux显示用户注册名 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ finger -s Login Name Tty Idle Login Time Of ...