一个线程执行相加的操作,相加结束后,通知另一个线程打印。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.xiva.baseKnowledge;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Administrator
*/
public class MutiThread {
public static int count = 0;
//public static boolean mutex = true;
public synchronized void print() {
System.out.println(count);
}
public synchronized void add(int i) {
count = count + i;
System.out.println("add");
}
public static void main(String[] args) {
MutiThread mThread = new MutiThread();
PrintThread pThread = new PrintThread(mThread);
AddThread addThread = new AddThread(pThread);
addThread.start();
pThread.start();
}
}
class PrintThread extends Thread {
private final MutiThread mThread;
private volatile boolean startP = false;
public PrintThread(MutiThread mThread) {
this.mThread = mThread;
}
public MutiThread getMThread(){
return this.mThread;
}
public synchronized void notifyPrint(){
startP = true;
notify();
}
public synchronized void print(){
if(startP){
mThread.print();
startP = false;
}
else{
try {
wait();
} catch (InterruptedException ex) {
Logger.getLogger(AddThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
public void run() {
while (true) {
print();
}
}
}
class AddThread extends Thread {
private final PrintThread pThread;
public AddThread(PrintThread pThread) {
this.pThread = pThread;
}
@Override
public void run() {
for (int i = 1; i < 1000; i++) {
try {
//Thread.sleep(5000);
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException ex) {
Logger.getLogger(MutiThread.class.getName()).log(Level.SEVERE, null, ex);
}
pThread.getMThread().add(i);
pThread.notifyPrint();
}
}
}
调用notifyPrint方法通知另一个线程启动打印。
分享到:
相关推荐
在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...
在Java多线程编程中,`wait()`和`notify()`是两个非常重要的方法,它们用于线程间的协作和通信。这两个方法是Java语言中的Object类提供的,因此所有的对象都可以使用。在本文中,我们将深入探讨如何使用主线程来控制...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典同步问题时非常有用。 #### 代码分析 给出的代码示例包括两个类:`ThreadA`和`ThreadB`。`ThreadA`作为主程序...
Java线程间通信之wait/notify Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式。 wait()方法将当前线程置于等待...
`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...
首先,`wait()`, `notify()`和`notifyAll()`是Object类中的方法,它们主要用于线程间通信和协作。这些方法只能在同步环境中(如`synchronized`块或方法)使用,否则会抛出`IllegalMonitorStateException`。它们的...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...
它们主要用于线程间通信,配合`synchronized`使用。 1. `wait()`:让当前持有锁的线程释放锁,并进入等待池,直到其他线程调用`notify()`或`notifyAll()`唤醒该线程。调用`wait()`后,线程会释放持有的锁,进入等待...
在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待...
线程间通信的关键在于数据共享。在C++中,可以使用全局变量、类的成员变量或者静态成员变量来实现在不同线程间的共享。但是,无保护的共享数据可能会引发竞态条件,导致不可预测的行为。因此,需要采取适当的同步...
7. **BlockingQueue**:队列实现的一种,提供了线程安全的数据结构,可以用来实现线程间的通信和协作。例如,`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`。 8. **CompletableFuture**:...
1. Java多线程学习(一)Java多...6. Java多线程学习(五)线程间通信知识点补充 7. Java多线程学习(六)Lock锁的使用 8. Java多线程学习(七)并发编程中一些问题 9. Java多线程学习(八)线程池与Executor 框架