java信号灯_java 多线程-信号灯法
借助标志位
public class light {
public static void main(String[]args)
{
Tv tv=new Tv();
new Player(tv).start();
new Watcher(tv).start();
}
}
//生产者 演员
class Player extends Thread{
Tv tv;
public Player(Tv tv)
{
this.tv=tv;
}
public void run()
{
for(int i=0;i<20;i++)
{
if(i%2==0)
{
this.tv.play("偶不变");
}else
{
this.tv.play("奇变");
}
}
}
}
//消费者 观众
class Watcher extends Thread{
Tv tv;
public Watcher(Tv tv)
{
this.tv=tv;
}
public void run()
{
for(int i=0;i<20;i++)
{
this.tv.watch("无聊");
}
}
}
//同一个资源 电视
class Tv {
String voice;
//信号灯
//为真则演员表演,观众等待
//为假则观众观看,演员等待
boolean flag=true;
//表演
public synchronized void play(String voice)
{
if(!flag)
{
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("表演了:"+voice);
this.voice=voice;
//表演后
this.notifyAll();
this.flag=!this.flag;
}
public void watch(String string) {
// TODO Auto-generated method stub
}
//观看
public synchronized void watch()
{
if(flag)
{
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("听到了:"+voice);
//观看后:
this.notifyAll();
this.flag=!this.flag;
}
}
java信号灯_java 多线程-信号灯法相关推荐
- java模拟交通信号灯_java 多线程交通信号灯模拟过程详解
这学期我们java课程的课程设计项目----交通信号灯的线程设计 实验目的:多线程设计,同步机制 题意 设计一个交通信号灯类: 变量:位置.颜色(红.黄.绿).显示时间(秒). 方法:切换信号灯. 创 ...
- 多线程 java 实例_Java多线程实例学习
1. Java多线程的就绪.运行和死亡状态 就绪状态转换为运行状态:当此线程得到处理器资源: 运行状态转换为就绪状态:当此线程主动调用yield()方法或在运行过程中失去处理器资源. 运行状态转换为死 ...
- java厨房_Java多线程基础
目录: 进程和线程 为什么使用多线程? 多线程的创建方式 Runnable与Thread两种方式比较 start()与run()方法 线程的生命周期/状态转换 常用方法使用与解读 线程的优先级 守护线 ...
- java 计时器_Java多线程并发容器之并发倒计时器
从火箭发场景来学习Java多线程并发闭锁对象 倒计时器场景 在我们开发过程中,有时候会使用到倒计时计数器.最简单的是:int size = 5; 执行后,size-这种方式来实现.但是在多线程并发的情 ...
- java信号灯_java 信号灯 Semaphore
http://blog.csdn.net/java2000_wl/article/details/23556859 import java.util.concurrent.ExecutorServic ...
- java多核_java多线程中与多核cpu有什么关系?
操作系统提供多任务功能,进程和线程都是任务,进程有独立的内存空间.多任务被操作调度共享CPU,每个任务运行一个时间片,然后交出CPU,再由其他任务占用CPU.多任务又分为抢占式多任务和协作式多任务. ...
- 什么是java线程_Java多线程是什么意思?
展开全部 Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多636f707932313 ...
- java丐帮_Java多线程学习笔记(一)
一.什么是多线程 首先是多线程的概念: 多线程是异步的,和单任务不同,并不一定按照代码的执行顺序(上图左)来运行,而是交错占用CPU运行(上图右): 二.如何使用多线程 JAVA多线程有两种实现方式: ...
- java丐帮_java多线程学习笔记(五)
补充一个synchronized关键字的结论: 线程A先持有object对象的Lock锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法 A线程现持有object对 ...
最新文章
- Github | NumPy手写全部主流机器学习模型
- 《训练指南》——6.9
- 项目中使用EasyPOI完成监控设备历史数据的导出
- 为什么base64编码的字符串的末尾有=符号
- STM32 KEIL 下的 printf 函数
- Qt+VS2019+OpenCV 使用问题 - Cound not find “QT“
- 使用Excel制作证件照之替换背景色
- 实例003 输出名言
- c语言处理文本断句空格,c语言怎么断句
- Codeforces #467 (Div. 2) B. Vile Grasshoppers 蚂蚱的题目
- docker相关的文件配置
- 使用Office 365前,企业必须要知道的10件事
- 弹幕插件easyDanmaku.js使用详解
- 从入门到断送职业生涯只差这几步
- 3D max新增超级阵列功能Array !
- 修改用户名和用户组名
- 软件危机的定义?软件危机的7个典型表现和为什么会出现软件危机?
- 数学表达式转换成python_简单数学表达式_清华尹成python入门教程_少儿编程视频-51CTO学院...
- (1) tcp、udp与sctp概述
- mysql数据库问题解答_MySQL数据库常见错误问题解答 - MySQL 教程精选
热门文章
- linux编译boost
- 实现lua面向对象的private属性
- leetcode 306. Additive Number | 306. 累加数(Java)
- leetcode 227. Basic Calculator II | 227. 基本计算器 II(中缀表达式求值)
- leetcode 223. Rectangle Area | 223. 矩形面积(Java)
- leetcode 101. 对称二叉树 递归解法
- C++ vector容器 find erase的使用:查找并删除指定元素
- Java HttpClient使用小结
- 分别从资源管理,服务用户,进程交互,系统实现的角度分析操作系统的作用
- 15.concurrent-control并发控制