同步方法中使用wait(),notify(),notifyAll()
wait(),notify(),notifyAll()方法都是Object类中的final方法,被所有类继承,不能重写。当一个线程使用的同步方法中用到某个变量。而次变量需要其它线程修改后才能符合本线程的需要,那么可以在本线程中使用wait()方法。它中断线程的执行,使本线程处于等待状态,让出CPU使用权,并让其它线程使用这个同步方法,其它线程在使用这个同步方法时若不需要等待,那么它使用完这个同步方法后,要用notifyAll()方法通知所有的由于使用该同步方法而处于等待的线程结束等待。层中断的线程就会重新排队等待CPU资源,以便从刚才中断处继续执行这个同步方法。(如果用notify()方法,那么只是通知处于等待状态的线程中的某一个结束等待)
* 三人排队买票,票价5,初始售票员只有一张5块.a:20块;b:10块;C:5块
* @author Young
* class TestConmunicate
*/
public class TicketSell {
int fiveNum = 1,tenNum = 0,twentyNum = 0;
TicketSell() {
}
public synchronized void sellTicket(int receiveMoney){
if (receiveMoney == 5) {
fiveNum += 1;
System.out.println(Thread.currentThread().getName()+" 给我5块钱,这是您的入场券\n");
} else if (receiveMoney == 10){
while (fiveNum < 1) {
try {
System.out.println(Thread.currentThread().getName()+" 靠边站");
wait();
System.out.println(Thread.currentThread().getName()+" 结束等待");
} catch (Exception e) {
e.printStackTrace();
}
}
fiveNum -= 1;
tenNum += 1;
System.out.println(Thread.currentThread().getName()+" 给我10元钱,找你5块,这是你的入场券!");
}else if (receiveMoney == 20) {
while (fiveNum < 1 || tenNum < 1) {
try {
System.out.println(Thread.currentThread().getName()+" 靠边站");
//wait();
Thread.currentThread().wait();
System.out.println(Thread.currentThread().getName()+" 结束等待!");
} catch (Exception e) {
e.printStackTrace();
}
}
fiveNum -= 1;
tenNum -= 1;
twentyNum += 1;
System.out.println(Thread.currentThread().getName()+" 给我20元,找你15元,这是你的入场券!");
}
notify();
}
}
分享到:
相关推荐
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...
Java 中Object的wait() notify() notifyAll()方法使用 在Java并发编程中,Object的wait()、notify()和...wait()、notify()和notifyAll()方法是Java并发编程中非常重要的概念,理解它们的使用方法和价值是非常重要的。
在Java多线程编程中,`wait()` 和 `notifyAll()` 方法是非常重要的同步机制,主要用于实现线程间的通信与同步控制。通过合理运用这些方法,可以有效地解决生产者消费者模型中的资源竞争问题。本文将结合具体的代码...
在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...
- load()方法中使用了wait(),确保线程在等待条件满足时释放锁,并在被唤醒后重新检查条件。 总之,Java多线程同步通过wait()、notify()和notifyAll()等方法,配合synchronized关键字,实现了对共享资源的访问控制...
标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...
`wait()`、`notify()`和`notifyAll()`方法是Java中实现线程同步的关键工具。正确使用它们可以有效避免线程间的竞争条件和死锁问题,同时也能实现线程间的高效通信。在实际开发中,应根据具体的应用场景选择合适的...
在Java中,`wait()`、`notify()`和`notifyAll()`方法都是与对象锁相关的,它们用于控制线程的同步。使用这些方法的前提是线程必须拥有对象的监视器,也就是对象锁。这是通过在synchronized块或方法中调用它们来实现...
需要注意的是,`wait()`、`notify()` 和 `notifyAll()` 必须在同步块或同步方法中调用,以避免出现 `IllegalMonitorStateException`。此外,`InterruptedException` 在 `wait()` 中应该被妥善处理,通常是重新抛出或...
1. **锁的持有**:调用`wait()`, `notify()`, 或 `notifyAll()` 必须在同步块(`synchronized` block)或同步方法中进行,即当前线程必须持有对象的锁。否则,会抛出`IllegalMonitorStateException`异常。这是因为这些...
在 Java 中,wait 和 notifyAll 是两个非常重要的方法,它们都是在 Object 类中声明的,用于实现线程之间的通信和同步。wait 方法会使调用线程进入等待状态,并释放所持有的对象锁,而 notifyAll 方法则会去唤醒当前...
本文将深入探讨`wait`、`notify`以及`notifyAll`这三个关键字的使用及其背后的原理,帮助你理解如何在实际编程中有效地利用它们来解决线程同步问题。 首先,我们需要了解Java中的对象锁。每个Java对象都有一个内置...
Java多线程基础中的线程等待与唤醒是一种常见的线程协作机制,通过wait()、notify()和notifyAll()方法来实现线程之间的同步和通信。在本节中,我们将详细介绍wait()、notify()和notifyAll()方法的使用和实现原理。 ...
- **权限和锁**:`wait()`, `notify()`和`notifyAll()`需要在同步上下文中使用,而`sleep()`则不需要。 - **资源释放**:`wait()`会释放对象锁,而`sleep()`不会。 - **唤醒机制**:`wait()`需要其他线程调用`notify...
在提供的压缩包文件`java_sychronization`中,可能包含了一些示例代码,用于演示如何在Java中使用`synchronized`关键字以及`wait()`和`notify()`方法。通过研究这些样例,你可以更深入地了解这些工具的用法和效果。...
Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...
在Java中,使用`wait()`, `notify()`, 和 `notifyAll()`必须在同步块或者同步方法中,因为它们涉及到对共享资源的访问。这是为了避免出现竞态条件,确保只有一个线程在执行这些操作。 主线程控制子线程的`wait()`和...
- 在`run`方法中使用`synchronized(this)`确保对`this`对象的操作是同步的。 - 计算累加总和并在每次累加后输出当前总和。 - 调用`notify()`方法唤醒正在等待的线程。 #### `synchronized`关键字 `Synchronized...
Java中的`notify`和`notifyAll`是多线程编程中的关键方法,它们用于线程间的通信,特别是在处理同步机制时。这两个方法都是在`Object`类中定义的,因此可以应用于任何Java对象。 首先,我们需要理解Java的同步机制...
在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在...