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 ...
随机推荐
- markdown流程图画法小结
markdown流程图画法小结 markdown 画图 流程图 最简单的流程图为例 ```mermaid! graph TD A --> B //在没有(),[].{}等括号的情况之下,图标 ...
- Spring MVC 原理
一.什么是springmvc springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行开发. springMVC是一个基于mvc的web框架. Sprin ...
- iOS-UI控件优化
一.tableView的优化 tableView作为iOS开发中使用最为频繁的控件之一,对其进行优化,对整个应用性能的提升显得至关重要.官方设计的框架中,已经包含了UITableViewCell的重用 ...
- 微博爬虫“免登录”技巧详解及 Java 实现(业余草的博客)
一.微博一定要登录才能抓取? 目前,对于微博的爬虫,大部分是基于模拟微博账号登录的方式实现的,这种方式如果真的运营起来,实际上是一件非常头疼痛苦的事,你可能每天都过得提心吊胆,生怕新浪爸爸把你的那些账 ...
- FreeImage库如何转换图片格式?
FreeImage下载地址:http://freeimage.sourceforge.net/ //freeimagemain.h #ifndef FREEIMAGEMAIN_H #define FR ...
- docker 数据卷之进阶篇
笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...
- java程序中执行HiveQL
这里是指java中执行hive或者hiveQL. 注意:而不是经常说的通过JDBC的方式连接Hiveserver2来执行查询.是在部署了hiveserver的服务器上执行hive命令.这样就可以将分析 ...
- centos下利用qemu搭建arm模拟器
有点繁琐,整理一下,系统环境centos6.6,虚拟机以及实际系统中测试通过. 一.交叉编译器的下载与安装1.下载地址:http://blog.csdn.net/dldw8816/article/de ...
- 嵌入式Linux引导过程之1.5——从BootRom到Xloader
在开始看Xloader_Entry的代码之前,我想先总结一下从芯片上电到开始运行Xloader的代码的过程,这是我目前理解的一个过程,可能有所出入,待以后继续完善. 当 系统上电之后,首先会将PC寄存 ...
- XP硬盘读写速度很慢的解决方法
05购入的电脑,今日仍在发挥余热,但系统速度慢得出奇.今日检测了硬盘读写速度还不到2m/s,实在令人难以接受.一查之下,硬盘被置为PIO模式了,难怪. 用以下方法得以解决: 1.对桌面"我的 ...