package test_1;
public class BigSmallMonk
{
public static void main(String[] args)
{
WaterIntake Omonk=new WaterIntake();
PouringWater Ymonk=new PouringWater();
Thread Ymonk1=new Thread(Ymonk);
Ymonk1.setName("Ymonk1");
Thread Omonk1=new Thread(Omonk);
Omonk1.setName("Omonk1");
Ymonk1.start();
Omonk1.start();
}
}
class WaterTank//水缸
{
static int num=30;//水缸所能承受水的桶数
static int currentNum=0;//水缸里现有的水的桶数
static boolean flag = true;//缸口是否有人使用
public void reduce()//取水
{
synchronized (this)
{
while (!flag)
{
try
{
System.out.println("缸口有人使用");
this.wait();
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//这里不需要设置false,因为你这样一设置,另外一个线程总是执行那个while里并且在wait了。
//flag=false;
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
currentNum--;
flag=true;
this.notify();
System.out.println(Thread.currentThread().getName()+"取出了水");
}
}
public void push()//倒水
{
synchronized (this)
{
while (!flag)
{
try
{
System.out.println("缸口有人使用");
this.wait();
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//这里不需要设置false,因为你这样一设置,另外一个线程总是执行那个while里并且在wait了。
//flag=false;
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
currentNum++;
flag=true;
this.notify();
System.out.println(Thread.currentThread().getName()+"倒入了一桶水");
}
}
}
class WaterIntake implements Runnable//取水线程
{
WaterTank water=new WaterTank();
public void run()
{
while (true)
{
water.reduce();
}
}
}
class PouringWater implements Runnable//倒水线程
{
WaterTank water=new WaterTank();
public void run()
{
while(true)
{
water.push();
}
}
}
分享到:
相关推荐
java多线程同步互斥访问实例,对于初学者或是温故而知新的同道中人都是一个很好的学习资料
Java线程同步例子.pdf
这个“线程同步小例子”是基于孙鑫先生著作中的示例进行改进的,旨在帮助我们深入理解线程同步的机制和实践。 线程同步的主要目标是控制线程对共享数据的访问,以防止不正确的数据状态。在多线程环境下,如果多个...
Java线程同步是一种控制多个线程访问共享资源的方式,确保数据的一致性和完整性。在这个例子中,我们将讨论如何使用`synchronized`关键字实现线程同步,以及它的工作原理。 首先,我们有两个类`ThreadDemo`和`...
Java 线程同步控制机制 线程同步是 Java 编程中的一种机制,用于控制多个线程之间的资源访问顺序,以避免线程之间的冲突和数据不一致。线程同步的目的就是避免线程“同步”执行,即让多个线程之间排队操作共享资源...
Java 多线程例子 Java 多线程是 Java 编程语言中的一种基本概念,它允许程序同时执行多个任务,从而提高程序的性能和效率。本文将通过三个实用的例子,讲解 Java 多线程的基本概念和使用方法。 第一个例子:创建多...
Java线程同步是一种确保多个线程在访问共享资源时能够有序执行的技术,避免了数据的不一致性和竞态条件。在给定的示例中,通过两种方式展示了线程同步:synchronized方法和synchronized代码块。 首先,我们来看同步...
java线程同步java线程同步java线程同步
在Java中,我们可以使用`synchronized`关键字来实现线程同步。 线程同步在Java中主要有两种实现方式: 1. **同步方法**:通过在方法声明前加上`synchronized`关键字,可以使得整个方法成为同步方法。这意味着每次...
在`Callme.java`和`Caller.java`的例子中,`synchronized`关键字被用来同步方法`call()`和`f1()`、`f2()`、`f3()`。当一个线程正在执行被同步的方法时,其他试图访问该方法的线程会被阻塞,直到当前线程执行完毕。`...
在Java编程语言中,线程同步是一种控制多线程访问共享资源的方式,以避免数据不一致性和竞态条件。本文将详细解释Java线程同步的概念,并通过示例代码来说明其工作原理。 首先,我们需要理解Java中的两个主要同步...
电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关...第五章 Java线程编程的例子 第六章 Java线程调度 第七章 Java线程调度例子 第八章 和同步相关的高级主题 第九章 多处理器机器上的并行化 第十章 线程组
"Java多线程同步.pdf" Java多线程同步是指在Java语言中,如何使用synchronized关键字和其他同步机制来确保多线程程序的正确执行。在Java语言中,synchronized关键字用于对方法或者代码块进行同步,但是仅仅使用...
在深入探讨Java线程同步调用这一主题之前,我们首先需要理解线程同步的基本概念及其在多线程环境中的重要性。线程同步是多线程编程中的一个关键概念,它确保了多个线程在访问共享资源时不会发生冲突,避免了数据不...
在Java编程环境中,...总之,使用Java线程实现数据库主从同步更新是一种常见且实用的技术手段,它涉及到多线程编程、数据库操作、事务管理等多个方面。理解和掌握这些知识点对于开发高可用性的分布式系统至关重要。
本文将深入探讨Java多线程中的关键知识点,包括创建线程、主线程、线程优先级、线程组、线程同步以及线程间的通信。 1. **创建线程** 在Java中,可以通过两种方式创建线程:继承`Thread`类或实现`Runnable`接口。...