`
endual
  • 浏览: 3558612 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

多线程 wait() notify的用法

    博客分类:
  • java
 
阅读更多

main 类

 

package endual;

public class MainApp {

	public static void main(String[] args) {
		Query q = new Query(0) ;
		
		Thread thread = new Thread(new Thread1(q)) ;
		Thread thread2 = new Thread(new Thread2(q)) ;
		
		thread.start() ;
		thread2.start() ;
	}
	
}

 

 

 

 集中调用我们做一个类

 

 

package endual;

public class Query {

	private int value = 7;
	private boolean isFlag = false ;
	public Query(int value) {
		
		//this.value = value ;
	}
	
	public synchronized  void getValue() {
		
		if (!isFlag) { //如果是正确的
			
			isFlag = true ;
			notify() ;
		}
		
		try {
			wait() ;
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("我是线程1" + (value++)) ;
		
		
	}
	
	public synchronized void setValue() {
		
		if (!isFlag) { //如果是正确的
			
			try {
				wait() ;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
		
		isFlag = false ;
		value-- ;
		System.out.println("我是线程2" + value) ;
		notify() ;
	}
	

}

 

 

我们写两个线程 分别要调用query的get 和set 的方法

 

thread1

package endual;

public class Thread1 implements Runnable{

	private Query q = null ;
	
	public Thread1(Query q) {
		this.q = q ;
	}
	
	public void run() {

		while (true) {
			
			q.getValue() ;
			
		}
		
	}

}

 

 

 

thread2

 

 

package endual;

public class Thread2 implements Runnable{

	private Query q = null ;
	
	public Thread2(Query q) {
		this.q = q ;
	}
	
	public void run() {

		while (true) {
			
		q.setValue() ;
			
		}
		
	}
}

 

====================================================

 

我们来分析程序:

这个是两个线程之间等待以及唤醒对方,对待对方。

但是有一个重要的一点就是要添加一个关键词就是 synchronized 添加到方法的前面,如果不添加的话

会出现一个exception。其实我还不明白这是什么意思也不知道。要查下,平时我们学习的时候没有用到线程,特别是java web方面的学习,底层的框架已经给你写好这些了,我们只需要用的是写一下业务逻辑就可以了

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Java多线程wait和notify

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

    浅谈java多线程wait,notify

    在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在Java中,wait机制用于暂停当前线程的执行,并释放当前对象的锁,以便让其他线程获得锁并...

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

    在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...

    主线程去控制子线程wait与notify

    在Java多线程编程中,`wait()`和`notify()`是两个非常重要的方法,它们用于线程间的协作和通信。这两个方法是Java语言中的Object类提供的,因此所有的对象都可以使用。在本文中,我们将深入探讨如何使用主线程来控制...

    wait_notify_demo

    总结来说,Java的`wait()`、`notify()`和`notifyAll()`方法是实现多线程间协作的关键工具,特别是对于解决生产者消费者问题。理解它们的工作原理和正确使用方式对于编写高效的并发代码至关重要。在上述示例中,我们...

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

    Java多线程中wait、notify、notifyAll使用详解 Java中多线程编程中,wait、notify、notifyAll三个方法是非常重要的,它们都是Object对象的方法,用于线程之间的通信。下面我们将详细介绍这三个方法的使用和作用。 ...

    Java 同步方式 wait和notify/notifyall

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

    Java多线程通讯之wait,notify的区别详解

    Java多线程通讯之wait、notify的区别详解 ...wait、notify和notifyAll方法是Java多线程通讯中非常重要的方法,它们用于控制线程的状态和同步。在多线程编程中,使用这些方法可以保证线程的安全性和高效性。

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

    本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...

    Java 同步锁 wait notify 学习心得

    标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...

    java中几个notify、wait使用实例

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

    Java的sychronized、wait和notify范例

    `synchronized`关键字、`wait()`和`notify()`方法是Java多线程中用于控制并发访问共享资源的重要工具,它们是Java内存模型(JMM)的一部分,主要用于解决线程间的同步问题。 一、`synchronized`关键字 `...

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

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

    wait,notify等线程知识.pdf

    Java中的多线程协同工作是通过一系列的同步机制来实现的,其中wait、notify和notifyAll是基于对象监视器的同步原语。这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细...

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

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

    等待机制与锁机制wait notify

    总结来说,`wait`、`notify`和`notifyAll`是Java多线程中实现线程间通信的关键工具,它们允许线程在适当的时候释放资源并等待,以便其他线程完成特定任务后再继续执行。熟练掌握这些方法的使用,能够帮助你编写出...

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

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

    多线程通信和等待机制.docx

    在多线程编程中,wait()和notify()方法的使用可以提高程序的效率和可靠性,避免了线程之间的同步问题。例如,在生产者-消费者模式中,生产者线程可以使用wait()方法等待消费者线程的确认,而消费者线程可以使用...

    浅谈线程通信wait,notify作用

    print()方法中使用synchronized关键字来实现同步,使用wait()和notify()方法来实现线程之间的通信。 在print()方法中,我们使用while循环来实现打印10个数。当i小于10时,打印当前线程的名称和数字,然后执行notify...

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

    在Java编程语言中,多线程是...总之,理解和熟练掌握`wait()`, `notify()`以及`sleep()`的使用对于编写高效的多线程程序至关重要。在设计并发程序时,应根据需求选择合适的方法,确保线程间的协同工作和程序的正确性。

Global site tag (gtag.js) - Google Analytics