//进水
class Inflow implements Runnable{ //水对象
Water wat;
public Inflow(Water w){
this.wat = w;
} @Override
public void run() {
//进水
while (true) {
synchronized (wat) {
while (true) {
if (wat.count >= 50) {
wat.notify();
try {
wat.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
//睡眠线程
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
wat.count++;
System.out.println("现在是在进水,水量为:" + wat.count);
}
} }
}
} //出水
class Outflow implements Runnable{ Water wat;
public Outflow(Water w){
this.wat = w;
} @Override
public void run() {
//出水
while (true) {
//线程锁
synchronized (wat) {
while (true) {
if (wat.count <= 0) {
wat.notify();
try {
wat.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
wat.count--;
System.out.println("现在是在放水,剩余水量为:" + wat.count);
}
} }
}
}
class Water{ int count = 50; }
public class demo5 { public static void main(String[] args) {
//创建水对象
Water Water = new Water();
//进水对象
Inflow in = new Inflow(Water);
//放水对象
Outflow out = new Outflow(Water); //
Thread thread = new Thread(in);
Thread the = new Thread(out); //开启线程
thread.start();
the.start();
} }

  

java中用线程解决进出水问题的更多相关文章

  1. java中用过滤器解决字符编码问题

    java的web程序经常出现中文乱码的问题,用一个实现了Filter接口的过滤器类可以较好地解决这个问题. 方式一 EncodingFilter import java.io.IOException; ...

  2. Java如何使用线程解决生产者消费者问题?

    在Java编程中,如何使用线程解决生产者消费者问题? 以下示例演示如何使用线程解决生产者消费者问题. package com.yiibai; public class ProducerConsumer ...

  3. Java如何使用线程解决死锁?

    在Java编程中,如何使用线程解决死锁? 以下示例演示如何使用线程的概念解决死锁问题. // from W w w .Y I I b AI.c o M package com.yiibai; impo ...

  4. java中线程机制

    java中线程机制,一开始我们都用的单线程.现在接触到多线程了. 多线性首先要解决的问题是:创建线程,怎么创建线程的问题: 1.线程的创建: 四种常用的实现方法 1.继承Thread. Thread是 ...

  5. Java面向对象 线程技术--上篇

     Java面向对象   线程 知识概要:                   (1)线程与进程 (2)自定义线程的语法结构 (3)多线程概念理解 (4)多线程状态图 (5)多线程--卖票 (6)同 ...

  6. java.lang.UnsatisfiedLinkError解决方法汇集(转载)

    我的解决方法: 将sigar.jar拷贝到/WEB-INF/lib/下,但这个方法不知道是不是终极解决办法,暂时没问题,其他方法可参考下面. 运行JSP报表程序页面出现java.lang.Unsati ...

  7. java thread 线程40个问题汇总

    http://www.codeceo.com/article/40-java-thread-problems.html 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了, ...

  8. Java基础-线程操作共享数据的安全问题

    Java基础-线程操作共享数据的安全问题 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.引发线程安全问题 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运 ...

  9. 沉淀再出发:java中线程池解析

    沉淀再出发:java中线程池解析 一.前言 在多线程执行的环境之中,如果线程执行的时间短但是启动的线程又非常多,线程运转的时间基本上浪费在了创建和销毁上面,因此有没有一种方式能够让一个线程执行完自己的 ...

随机推荐

  1. 原生javascript效果:无缝滚动

    <style type="text/css"> #con {width:400px; padding:10px; margin:20px auto; text-alig ...

  2. Seven Python Tools All Data Scientists Should Know How to Use

    Seven Python Tools All Data Scientists Should Know How to Use If you’re an aspiring data scientist, ...

  3. loadrunner_analysis技巧_filter和group by

    很多时候要对loadrunner的收集结果进行一些选择性的过滤,比如我们使用阶梯式增加用户的方式,在初期vu没有全部准备好的情况下,此时的曲线不能体现实际情况,所以我们可以用 filter这个工具来帮 ...

  4. [topcoder]SmartWordToy

    广度搜索BFS,要用Queue.还不是很熟,这道题帮助理清一些思绪了.其实这道题是求最短路径,所以BFS遇到第一个就可以返回了,所以后面有些现有大小和历史大小的判断可以省却. 过程中拿数组存step还 ...

  5. ANDROID_MARS学习笔记_S01原始版_011_XML

    一.代码 1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  6. 165. Compare Version Numbers

    题目: Compare two version numbers version1 and version2.If version1 > version2 return 1, if version ...

  7. JavaScript中的自调用函数

    自调用函数 自调用函数(self-invoking funciton)就是函数定义完之后会立即运行的函数. 最常见的写法是: (function() { // function body... }() ...

  8. WinForm实现简单的拖拽功能(C#)

    用到了ListBox和TreeView两个控件,ListBox作为数据源,通过拖拽其中的数据放置到TreeView上,自动添加一个树节点 ListBox控件的MouseDown用于获取要拖拽的值并调用 ...

  9. 搭建Git本地服务器

    搭建Git本地服务器 参考文章:http://www.ossxp.com/doc/git/gitolite.html 当前任务,学习中... 公司小范围用法: 服务器上做的: .在服务器上建立一个用户 ...

  10. URAL1036. Lucky Tickets

    链接 dp[i][j] += dp[i-1][j-g];背包吧 数据太大了 还是JAVA好用 import java.io.*; import java.math.*; import java.tex ...