`

notify notifyall wait 方法的使用

阅读更多

//			object类的notify(),notifyall(),wait,wait(long),wait(long,int)
//			object.wait();  使拥有当前对象object的线程进入睡眠状态,放弃锁release lock;
//			notify() 通知在对象上因调用wait()而处于睡眠状态的某一线程启动;
//			notifyAll() 通知在对象上因调用wait()而处于睡眠状态的所有线程启动,这些进程根据优先级顺序执行;

class Q {
	int n;
	boolean valueSet = false;

	public synchronized int get() {
		if (!valueSet)
			try {
				this.wait(); // 使当前使用该对象的线程睡眠
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		System.out.println("Get n = " + n);
		valueSet = false;
		notify(); // 通知一个线程可以调用该线程了
		return n;
	}

	public synchronized void put(int n) {
		// if valueSet == true,already have value so wait fetch,else put
		if (valueSet)
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		this.n = n;
		System.out.println("Put n = " + n);
		valueSet = true;
		notify();
	}
}

class Producer implements Runnable {
	Q q = null;

	Producer(Q q) {
		this.q = q;
		(new Thread(this, "Producer")).start();
	}

	@Override
	public void run() {
		int i = 0;
		while (i < 10) {
			q.put(i++);
		}
	}
}

class Consumer implements Runnable {
	Q q = null;

	public Consumer(Q q) {
		this.q = q;
		(new Thread(this, "Consumer")).start();
	}

	@Override
	public void run() {
		while (q.get() < 9) {
		}
	}
}

public class DemoThread {
	public static void main(String[] args) {
		Q q = new Q();

		new Consumer(q);
		new Producer(q);
	}
}
 
分享到:
评论

相关推荐

    Java 同步方式 wait和notify/notifyall

    在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...

    源码—Java多线程5—死锁和wait notify notifyAll

    源码—Java多线程5—死锁和wait notify notifyAll

    java中几个notify、wait使用实例

    当一个线程执行到`wait()`方法时,它会释放当前持有的锁并进入等待状态,直到其他线程调用同一锁上的`notify()`或`notifyAll()`方法唤醒。`wait()`方法还有两个重载版本:`wait(long timeout)`和`wait(long timeout,...

    Java 中Object的wait() notify() notifyAll()方法使用

    Java 中Object的wait() notify() notifyAll()方法使用 在Java并发编程中,Object的wait()、notify()和...wait()、notify()和notifyAll()方法是Java并发编程中非常重要的概念,理解它们的使用方法和价值是非常重要的。

    Java多线程中wait、notify、notifyAll使用详解

    例如,在生产者-消费者模型中,生产者线程可以使用wait()方法等待消费者线程的唤醒,而消费者线程可以使用notify()或notifyAll()方法唤醒生产者线程。 wait、notify、notifyAll方法是Java多线程编程中非常重要的...

    wait和notifyAll方法的使用示例

    ### 使用wait和notifyAll方法详解 #### 一、引言 在Java多线程编程中,`wait()` 和 `notifyAll()` 方法是非常重要的同步机制,主要用于实现线程间的通信与同步控制。通过合理运用这些方法,可以有效地解决生产者...

    java之wait,notify的用法([ 详解+实例 ])

    wait方法是Object类的一个方法,用于让当前线程进入等待状态,直到其他线程调用notify或notifyAll方法来唤醒它。在wait方法中,当前线程会释放它所占有的锁,并进入等待状态。wait方法可以带有参数,指定等待的时间...

    wait()、notify()和notifyAll()方法1---马克-to-win java视频

    wait()、notify()和notifyAll()方法1---马克-to-win java视频

    wait()、notify()和notifyAll()方法2---马克-to-win java视频

    wait()、notify()和notifyAll()方法2---马克-to-win java视频

    如何在Java中正确使用 wait, notify 和 notifyAll

    wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。  在 Java 中可以用 wait、notify 和 notifyAll 来实现...

    深入理解Wait、Notify和Wait与sleep区别

    1. **wait()**:当一个线程调用对象的`wait()`方法时,它会释放当前对象的锁,并进入等待池,直到其他线程调用同一对象的`notify()`或`notifyAll()`方法唤醒它。唤醒后,线程不会立即恢复执行,而是需要重新获取对象...

    Java的wait(), notify()和notifyAll()使用心得

    1. **锁的持有**:调用`wait()`, `notify()`, 或 `notifyAll()` 必须在同步块(`synchronized` block)或同步方法中进行,即当前线程必须持有对象的锁。否则,会抛出`IllegalMonitorStateException`异常。这是因为这些...

    【并发编程】 — 线程间的通信wait、notify、notifyAll

    文章目录1 wait、notify、notifyAll简单介绍1.1 使用方法 + 为什么不是Thread类的方法1.2 什么时候加锁、什么时候释放锁?1.3 notify、notifyAll的区别2 两个比较经典的使用案例2.1 案例1 — ABCABC。。。三个线程...

    Java多线程同步(wait()notify()notifyAll())[文].pdf

    本文将深入探讨Java中的wait()、notify()和notifyAll()方法,以及synchronized关键字和原子操作在多线程环境中的应用。 1. **wait()方法**: - wait()是Object类的一个方法,它的作用是让当前线程暂停执行并释放它...

    wait_notify_demo

    `wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...

    Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)

    在本节中,我们将详细介绍wait()、notify()和notifyAll()方法的使用和实现原理。 wait()方法 wait()方法是一个对象的方法,用于使当前线程等待该对象的锁定,以便其他线程可以获取该锁定并继续执行。当一个线程...

    Java多线程wait和notify

    `wait()` 方法会让当前持有锁的线程进入等待状态,释放锁,直到其他线程调用 `notify()` 或 `notifyAll()` 唤醒它。`notify()` 则会随机选择一个等待在该对象监视器上的线程并唤醒它,而 `notifyAll()` 则会唤醒所有...

    Java notify和notifyAll的区别和相同

    Java中的`notify`和`notifyAll`是多线程编程中的关键方法,它们用于线程间的通信,特别是在处理同步机制时。这两个方法都是在`Object`类中定义的,因此可以应用于任何Java对象。 首先,我们需要理解Java的同步机制...

    基于Java多线程notify与notifyall的区别分析

    Java中的多线程编程是构建高效并发应用的关键技术之一,其中`wait()`、`notify()`和`notifyAll()`是Java对象锁机制中的三个关键方法,它们位于`java.lang.Object`类中,主要用于线程间通信。本文将深入探讨`notify()...

    java多线程之wait(),notify(),notifyAll()

    在Java多线程编程中,wait(),notify(),notifyAll()是三个非常重要的方法,它们都是Object类中的方法,意味着每个对象都有这些方法。这些方法是用来实现线程之间的通信和同步的。 首先,我们来看wait()方法。wait()...

Global site tag (gtag.js) - Google Analytics