`

多线程----wait/notify

    博客分类:
  • java
 
阅读更多
线程同步:两个线程依次对同一变量进行操作。

package com.thread.waitNotify;

/**
 * 线程一对变量加1,线程二对该变量减1,如此循环下去
 * 
 * @author yangjianzhou
 * @description TODO
 * @time Nov 6, 2014 : 9:39:53 PM
 */
public class ThreadTest1 {

	public static void main(String[] args) {
		final AssistClass assist = new AssistClass();
		new Thread(new Runnable() {
			@Override
			public void run() {
				while (true) {
					assist.plus();
				}
			}
		}).start();

		new Thread(new Runnable() {
			@Override
			public void run() {
				while (true) {
					assist.minus();
				}
			}
		}).start();
	}
}

class AssistClass {
	boolean runPlus = true;
	
	private int amount;
    /**
     * execute ++amount ,then print the field
     */
	public synchronized void plus() {
		if (!runPlus) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		System.out.println("plus method : amount = " + (++amount));
		runPlus = false;
		this.notify();
	}

    /**
     * execute --amount ,then print the field
     */
	public synchronized void minus() {
		if (runPlus) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("minus method : amount = " + (--amount));
		runPlus = true;
		this.notify();
	}

}



运行结果:
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
plus method : amount = 1
minus method : amount = 0
分享到:
评论

相关推荐

    42.线程间的通信-wait与notify-wait(long)的使用.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java 同步方式 wait和notify/notifyall

    总结一下,`wait()`, `notify()`, 和 `notifyAll()` 是Java多线程编程中的核心工具,它们与`synchronized`关键字一起,为线程间的协作提供了强大的支持。理解并熟练掌握这些概念,对于编写高效、安全的多线程程序至...

    Java多线程wait和notify

    总结来说,Java的 `wait()` 和 `notify()` 提供了一种在多线程环境中控制线程执行的机制。通过合理使用这些方法,我们可以实现线程间的协作,精确控制子线程的运行状态。然而,这种方式虽然灵活,但管理起来相对复杂...

    41.线程间的通信-wait与notify-只唤醒一个线程或所有线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    day24-多线程-设计模式.7z

    在探索多线程和设计模式的同时,还要关注线程间的通信(如使用`wait()`、`notify()`、`notifyAll()`等)、同步机制(如`synchronized`关键字、`Lock`接口等)、线程池的使用(`ExecutorService`、`...

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    39.线程间的通信-wait与notify-wait方法自动释放锁与notify方法不会释放锁.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    java 多线程-线程通信实例讲解

    3. 多线程等待相同信号:如果有多个线程等待同一个对象,`notify()`只能唤醒一个,因此需要设计合适的同步机制确保所有等待的线程都能得到通知。 总的来说,Java的线程通信机制为多线程环境下的协作提供了基础。...

    Java多线程-线程间的通信

    ### Java多线程—线程间的通信 #### 一、线程间的通信 ##### (1)为什么要处理线程间的通信? 在多线程环境中,不同的线程可能需要协同工作来完成一项任务。例如,一个线程负责生产数据,另一个线程负责消费这些...

    Java的多线程-线程间的通信.doc

    在Java多线程编程中,线程间的通信是非常重要的概念,用于协调多个并发执行的任务。线程的状态转换是理解线程通信的基础,主要包括四个状态:新(New)、可执行(Runnable)、死亡(Dead)和停滞(Blocked)。新状态...

    412.410.JAVA基础教程_IDEA的使用与多线程-IDEA的常用设置(412).rar

    - 同步机制:学习synchronized关键字、wait/notify机制,以及Lock接口(如ReentrantLock)用于控制并发访问,防止数据不一致性。 - 线程池:使用ExecutorService和ThreadPoolExecutor创建线程池,以提高系统性能并...

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

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

    Java多线程-生产者与消费者问题

    ### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...

    38.线程间的通信-wait与notify-wait与notifty机制的实现.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    人工智能-项目实践-多线程-Paxos算法的多线程实现.zip

    - **线程通信**:使用wait()、notify()和notifyAll()方法,或者条件变量(Condition)来协调线程间的执行顺序。 - **线程池**:ExecutorService和ThreadPoolExecutor提供线程池管理,减少线程创建和销毁的开销,...

    浅谈java多线程wait,notify

    _java多线程wait、notify机制详解_ 在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地...

    【IT十八掌徐培成】Java基础第08天-02.多线程-join-daemon-同步.zip

    此外,`wait()`和`notify()`(或`notifyAll()`)方法用于线程间的通信,让线程在等待资源时释放CPU,并在资源可用时唤醒。Java还提供了`ReentrantLock`可重入锁,它具有更高的灵活性,可以实现更复杂的同步策略。`...

    java基础--11.多线程-1

    在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应性。本节我们将深入探讨Java中的多线程概念,包括其重要性、创建方法以及相关机制。 一、多线程的重要性 1....

    藏经阁-多线程-陶云峰.pdf

    "多线程编程基础知识点总结" 多线程编程是指在一个程序中同时执行多个线程,以提高程序的执行效率和响应速度。在C++中,多线程编程是通过使用std::thread类来实现的。下面是多线程编程的基础知识点总结: 一、线程...

Global site tag (gtag.js) - Google Analytics