`
wesker0918
  • 浏览: 42122 次
  • 性别: Icon_minigender_1
  • 来自: 山东->北京
社区版块
存档分类
最新评论

线程的wait(),notify()例子

阅读更多
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();
	}
} 

 

分享到:
评论

相关推荐

    Java多线程wait和notify

    下面是一个简单的例子,展示了如何通过 `wait()` 和 `notify()` 控制子线程的执行: ```java public class ThreadControl { private boolean running = false; private Object monitor = new Object(); public ...

    一个理解wait()与notify()的例子

    ### 一个理解wait()与notify()的例子 #### 知识点概述 本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要...

    wait_notify_demo

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

    Java 同步方式 wait和notify/notifyall

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

    等待机制与锁机制wait notify

    本文将深入探讨`wait`、`notify`以及`notifyAll`这三个关键字的使用及其背后的原理,帮助你理解如何在实际编程中有效地利用它们来解决线程同步问题。 首先,我们需要了解Java中的对象锁。每个Java对象都有一个内置...

    浅谈线程通信wait,notify作用

    浅谈线程通信wait、notify作用 在多线程编程中,线程之间的通信非常重要。wait()和notify()方法是Java语言中最基本的线程通信机制。它们可以使得线程之间相互发送信号,从而实现线程之间的协作。 wait()方法的作用...

    java中几个notify、wait使用实例

    在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...

    详细分析java线程wait和notify

    这个例子展示了如何通过`wait()`和`notify()`实现线程间的交替执行。 需要注意的是,`wait()`方法会抛出`InterruptedException`,在调用`wait()`之前,通常需要检查线程是否已经被中断,或者在`catch`块中妥善处理...

    java中线程的应用例子

    3. **线程通信**:`wait()`, `notify()` 和 `notifyAll()` 方法用于线程间的通信,但它们必须在`synchronized`代码块中使用,否则会抛出异常。 4. **线程状态**:Java线程有五种状态:新建、可运行、运行、阻塞和...

    Java多线程的小例子——吃包子

    在这个例子中,厨师可能需要调用`wait()`让线程暂停,顾客吃完包子后调用`notify()`或`notifyAll()`唤醒厨师。 7. **死锁(Deadlock)**:如果两个或更多线程互相等待对方释放资源,而又都不愿意先释放自己持有的...

    浅谈Java线程间通信之wait/notify

    Java线程间通信之wait/notify Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式。 wait()方法将当前线程置于等待...

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

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

    一个简单的线程例子

    此外,线程间的通信可以通过wait()、notify()和notifyAll()方法实现,这些方法需要在synchronized上下文中使用。例如,一个线程可能需要等待另一个线程完成某项工作后才能继续,这时就可以使用这些方法进行协调。 ...

    多线程程序小例子实现

    此外,线程间的通信通常通过wait()、notify()和notifyAll()方法实现,这些方法需要在synchronized块内调用,用于控制线程的执行顺序。 六、示例代码 下面是一个简单的Java多线程示例,展示了如何创建、启动、终止...

    Java线程同步例子.pdf

    本例展示了Java如何使用synchronized关键字实现线程同步,以及wait()和notify()方法进行线程间的通信。 首先,我们有一个名为`Comsumer`的消费者类,它继承自`Thread`。消费者类中包含一个`Market`对象,表示消费者...

    java-wait和notify的用法.pdf

    在Java编程语言中,`wait()`和`notify()`是Object类中的两个关键方法,它们用于线程间的协作和通信。这两个方法在多线程环境下尤其重要,因为它们允许线程等待特定条件并通知其他线程继续执行。在分析给定的程序之前...

    一家三口共用同一账户银行卡,wait();notify();

    10. **程序流程控制**:通过wait()和notify(),可以实现线程间的协同工作,例如在这个例子中,当余额不足时,父亲会被通知去存款,而当余额充足时,母亲和儿子才能进行消费。 这个简单的模拟展示了Java多线程和同步...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    public class ThreadWaitNotify { public static void main(String[] args) throws InterruptedException { DemoTest demoTest = new DemoTest(); // 使用线程池异步执行waitTest方法 ExecutorService ...

    多线程BUFFER例子

    `wait()`函数使线程进入等待状态,直到其他线程调用`notify_one()`或`notify_all()`来唤醒它们。 总结来说,这个“多线程BUFFER例子”主要涉及以下C++多线程知识点: 1. 使用`<thread>`库创建和管理线程。 2. 通过`...

    多线程经典例子

    为此,Java提供了各种同步机制,如`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法、以及`ReentrantLock`等高级锁。合理使用这些机制可以避免线程间的不和谐交互。 文件名"多线程"可能是一个包含多...

Global site tag (gtag.js) - Google Analytics