简单的java线程示例(排水)
这个程序是作为当时学习多线程的范例,水塘进排水,程序很简单
线程A和线程B 分别为排水和进水,包含线程初始化方法
先进行排水工作,进行一次工作观察目前剩水量mqsl是否足够排水,水排空
时,挂起排水线,进行进水工作
synchronized 关键字 :
代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法和 synchronized 块。
package Thread;public class Water {static Object water=new Object();static int total=6;static int mqsl=3;static int ps=0;
public static void main(String[] args) {ThreadA threadA=new ThreadA();ThreadB threadB=new ThreadB();threadB.start();threadA.start();}
}
class ThreadA extends Thread{void pswork(){synchronized(Water.water){System.out.println("水塘是否没有水:"+isEmpty());if(isEmpty()){try{Water.water.wait();}catch(InterruptedException e){e.printStackTrace();}}else{Water.ps++;System.out.println("水塘目前排水量"+Water.ps);}}}public boolean isEmpty(){return Water.mqsl==Water.ps?true:false;}public void run(){while(Water.mqsl<Water.total){if(isEmpty())System.out.println("水塘没有排水,排水线被挂起");System.out.println("排水工作开始");pswork();try{sleep(1000);}catch(InterruptedException e){e.printStackTrace();}}}
}
class ThreadB extends Thread{void jswork(){synchronized(Water.water){Water.mqsl++;Water.water.notify();System.out.println("水塘目前进水量为"+Water.mqsl);}}public void run(){while(Water.mqsl<Water.total){System.out.println("进水工作开始");jswork();try{sleep(3000);}catch(InterruptedException e){e.printStackTrace();}}}
}
版权声明:本文为博主原创文章,博客地址:http://blog.csdn.net/qq_37808895,未经博主允许不得转载。
结果图
简单的java线程示例(排水)相关推荐
- 一个简单的Java EEDocker示例
本文讲的是一个简单的Java EE&Docker示例,[编者的话]学习Docker的最好办法就是迅速在工作中应用它,本文作者使用Docker部署了一个Java EE应用,非常简单和方便.需要注 ...
- 求一个简单的java线程代码,Java线程代码的实现方法
1.继承Thread 声明Thread的子类 运行thread子类的方法 2.创建Thread的匿名子类 3.实现Runnable接口 声明 运行 4.创建实现Runnable接口的匿名类 5.线程名 ...
- java midi没有声音_简单的Java MIDI示例不产生任何声音
这个简单的代码在我用来测试的几台机器上没有产生任何声音.我正在Eclipse中运行代码,但我也尝试过使用命令行无济于事. public static void main(String[] args) ...
- 线程池简单实现java_简单实现java线程池
package com.ty.thread; importjava.util.HashSet;importjava.util.Set;importjava.util.concurrent.Blocki ...
- java多线程示例_Java线程示例
java多线程示例 Welcome to the Java Thread Example. Process and Thread are two basic units of execution. C ...
- 15个Java线程并发面试题和答案
面试Java开发者时常问的15个Java多线程和并发问题 现在有线程 T1.T2 和 T3.你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行? 这个线程面试题通常在第一轮面 ...
- 15 个 Java 线程面试题和答案
15 个 Java 线程面试题和答案 转自:http://www.importnew.com/29562.html 总之不要考虑那么多,下面是各种投行,比如巴克莱银行(Barclays).花旗银行(C ...
- 使用执行程序和ThreadPoolExecutor的Java线程池示例
线程池管理工作线程池,它包含一个队列,使任务等待执行. 线程池管理可运行线程的集合,工作线程从队列中执行可运行线程. java.util.concurrent.Executors提供java.util ...
- 从一个简单的Java单例示例谈谈并发
一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 public class UnsafeLazyInitiallization { private static Un ...
最新文章
- Android开发精要2--Android组件模型解析
- 计算两个日期相差几年几个月
- 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
- java swing图形界面开发 java.swing简介
- Oracle 基础 —SQL语句优化的途径
- [转]ListView滚动到底部自动加载数据
- Leetcode题目:Binary Tree Paths
- 风投围猎移动互联网:初现估值泡沫与马太效应
- php 预缓存,Steam更新着色器预缓存新功能,OpenGl、Vulkan硬件收效良多
- 136、易燃固体的概念
- 美团的2020年:千亿美元帝国的贪吃蛇游戏,气势汹汹也危机重重
- python之股票数据分析
- 如何记账,记录家庭收支情况
- Java基础知识(一),打好基础才能写出高质量代码
- python全0列表_Python 列表(Lists)
- 安卓手机游戏《英雄迷宫冒险》存档修改
- gmt转换北京时间 java_java GMT 日期转换 | 学步园
- Firebird数据库的安装配置与使用
- 什么人会成为神样的程序员:
- 关于重装WIN10后有NVIDIA驱动但没有控制面板的可能的解决办法