package cn.wangy;
class Producer implements Runnable {// 缓冲区内容生产者
Q q;
public Producer(Q q) {
this.q = q;
}
public void run() {
int i = 0;
while (true) {
synchronized (q) {//和消费者同步
if (q.full) {
try {
q.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
if (i == 0) {
q.name = "zhangsan";
q.sex = "male";
} else {
q.name = "lisi";
q.sex = "female";
}
q.full = true;
q.notify();
}
i = (i + 1) % 2;
}
}
}
class Consumer implements Runnable {
Q q;
public Consumer(Q q) {
this.q = q;
}
public void run() {
while (true) {
synchronized (q) {
if (!q.full) {
try {
q.wait();
} catch (Exception e) {}
}
System.out.print(q.name);
System.out.println(" " + q.sex);
q.full = false;
q.notify(); // waitnotify语句必须放在synchronized中
}
}
}
}
class Q {
public String name = "unknown";
public String sex = "unknown";
public boolean full = false;
}
public class Threadcommunation{
public static void main(String[] args){
Q q = new Q();
new Thread(new Producer(q)).start(); //传的都是一个q,所以synchronized(q)
new Thread(newConsumer(q)).start();
}
}
分享到:
相关推荐
下面是一个简单的例子,展示了如何通过 `wait()` 和 `notify()` 控制子线程的执行: ```java public class ThreadControl { private boolean running = false; private Object monitor = new Object(); public ...
### 一个理解wait()与notify()的例子 #### 知识点概述 本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要...
`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...
本文将深入探讨`wait`、`notify`以及`notifyAll`这三个关键字的使用及其背后的原理,帮助你理解如何在实际编程中有效地利用它们来解决线程同步问题。 首先,我们需要了解Java中的对象锁。每个Java对象都有一个内置...
浅谈线程通信wait、notify作用 在多线程编程中,线程之间的通信非常重要。wait()和notify()方法是Java语言中最基本的线程通信机制。它们可以使得线程之间相互发送信号,从而实现线程之间的协作。 wait()方法的作用...
在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...
这个例子展示了如何通过`wait()`和`notify()`实现线程间的交替执行。 需要注意的是,`wait()`方法会抛出`InterruptedException`,在调用`wait()`之前,通常需要检查线程是否已经被中断,或者在`catch`块中妥善处理...
3. **线程通信**:`wait()`, `notify()` 和 `notifyAll()` 方法用于线程间的通信,但它们必须在`synchronized`代码块中使用,否则会抛出异常。 4. **线程状态**:Java线程有五种状态:新建、可运行、运行、阻塞和...
在这个例子中,厨师可能需要调用`wait()`让线程暂停,顾客吃完包子后调用`notify()`或`notifyAll()`唤醒厨师。 7. **死锁(Deadlock)**:如果两个或更多线程互相等待对方释放资源,而又都不愿意先释放自己持有的...
Java线程间通信之wait/notify Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式。 wait()方法将当前线程置于等待...
wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 wait、notify 和 notifyAll 来实现...
此外,线程间的通信可以通过wait()、notify()和notifyAll()方法实现,这些方法需要在synchronized上下文中使用。例如,一个线程可能需要等待另一个线程完成某项工作后才能继续,这时就可以使用这些方法进行协调。 ...
此外,线程间的通信通常通过wait()、notify()和notifyAll()方法实现,这些方法需要在synchronized块内调用,用于控制线程的执行顺序。 六、示例代码 下面是一个简单的Java多线程示例,展示了如何创建、启动、终止...
本例展示了Java如何使用synchronized关键字实现线程同步,以及wait()和notify()方法进行线程间的通信。 首先,我们有一个名为`Comsumer`的消费者类,它继承自`Thread`。消费者类中包含一个`Market`对象,表示消费者...
Java提供了多种同步机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`接口和相关的类。 3. **Java多线程例子**:文档中的例子创建了两个线程,`thread1`和`thread2`。`thread1`...
在Java编程语言中,`wait()`和`notify()`是Object类中的两个关键方法,它们用于线程间的协作和通信。这两个方法在多线程环境下尤其重要,因为它们允许线程等待特定条件并通知其他线程继续执行。在分析给定的程序之前...
10. **程序流程控制**:通过wait()和notify(),可以实现线程间的协同工作,例如在这个例子中,当余额不足时,父亲会被通知去存款,而当余额充足时,母亲和儿子才能进行消费。 这个简单的模拟展示了Java多线程和同步...
public class ThreadWaitNotify { public static void main(String[] args) throws InterruptedException { DemoTest demoTest = new DemoTest(); // 使用线程池异步执行waitTest方法 ExecutorService ...
`wait()`函数使线程进入等待状态,直到其他线程调用`notify_one()`或`notify_all()`来唤醒它们。 总结来说,这个“多线程BUFFER例子”主要涉及以下C++多线程知识点: 1. 使用`<thread>`库创建和管理线程。 2. 通过`...