这个程序是作为当时学习多线程的范例,水塘进排水,程序很简单

线程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线程示例(排水)相关推荐

  1. 一个简单的Java EEDocker示例

    本文讲的是一个简单的Java EE&Docker示例,[编者的话]学习Docker的最好办法就是迅速在工作中应用它,本文作者使用Docker部署了一个Java EE应用,非常简单和方便.需要注 ...

  2. 求一个简单的java线程代码,Java线程代码的实现方法

    1.继承Thread 声明Thread的子类 运行thread子类的方法 2.创建Thread的匿名子类 3.实现Runnable接口 声明 运行 4.创建实现Runnable接口的匿名类 5.线程名 ...

  3. java midi没有声音_简单的Java MIDI示例不产生任何声音

    这个简单的代码在我用来测试的几台机器上没有产生任何声音.我正在Eclipse中运行代码,但我也尝试过使用命令行无济于事. public static void main(String[] args) ...

  4. 线程池简单实现java_简单实现java线程池

    package com.ty.thread; importjava.util.HashSet;importjava.util.Set;importjava.util.concurrent.Blocki ...

  5. java多线程示例_Java线程示例

    java多线程示例 Welcome to the Java Thread Example. Process and Thread are two basic units of execution. C ...

  6. 15个Java线程并发面试题和答案

    面试Java开发者时常问的15个Java多线程和并发问题 现在有线程 T1.T2 和 T3.你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行? 这个线程面试题通常在第一轮面 ...

  7. 15 个 Java 线程面试题和答案

    15 个 Java 线程面试题和答案 转自:http://www.importnew.com/29562.html 总之不要考虑那么多,下面是各种投行,比如巴克莱银行(Barclays).花旗银行(C ...

  8. 使用执行程序和ThreadPoolExecutor的Java线程池示例

    线程池管理工作线程池,它包含一个队列,使任务等待执行. 线程池管理可运行线程的集合,工作线程从队列中执行可运行线程. java.util.concurrent.Executors提供java.util ...

  9. 从一个简单的Java单例示例谈谈并发

    一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 public class UnsafeLazyInitiallization { private static Un ...

最新文章

  1. Android开发精要2--Android组件模型解析
  2. 计算两个日期相差几年几个月
  3. 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
  4. java swing图形界面开发 java.swing简介
  5. Oracle 基础 —SQL语句优化的途径
  6. [转]ListView滚动到底部自动加载数据
  7. Leetcode题目:Binary Tree Paths
  8. 风投围猎移动互联网:初现估值泡沫与马太效应
  9. php 预缓存,Steam更新着色器预缓存新功能,OpenGl、Vulkan硬件收效良多
  10. 136、易燃固体的概念
  11. 美团的2020年:千亿美元帝国的贪吃蛇游戏,气势汹汹也危机重重
  12. python之股票数据分析
  13. 如何记账,记录家庭收支情况
  14. Java基础知识(一),打好基础才能写出高质量代码
  15. python全0列表_Python 列表(Lists)
  16. 安卓手机游戏《英雄迷宫冒险》存档修改
  17. gmt转换北京时间 java_java GMT 日期转换 | 学步园
  18. Firebird数据库的安装配置与使用
  19. 什么人会成为神样的程序员:
  20. 关于重装WIN10后有NVIDIA驱动但没有控制面板的可能的解决办法

热门文章

  1. 如何解决li标签中不能添加文字在图片正下方
  2. 数据库服务器资源使用周报
  3. 如何在Excel中用VBA批量生成“照相机“图片
  4. 一个基于bootstrap的简单新闻页面
  5. 开放式蓝牙耳机测评!2023年值得入手的开放式蓝牙耳机索尼、南卡、韶音等品牌分享
  6. 最近对前端构建工具的一些理解
  7. 仅花半年时间,婚纱摄影小伙裸辞到Python月薪12K,究竟经历了什么?
  8. angular中ag-grid实战
  9. 华清远见重庆中心——Java面向对象阶段技术总结/个人总结
  10. Matlab使用 FFT 分析周期性数据