`
liuInsect
  • 浏览: 133516 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java中wait 信号量和notify信号量的使用

阅读更多

   直接copy 代码后运行 看效果:

package Thread;

public class WaitAndNotifyTest {
	
	public synchronized void wantTowait(int i ){
		try {
			System.out.println( i + "  ready to wait ");
			this.wait();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(  i +"  wait finsh");
	}
	
	public synchronized void wantToNotify(){
		System.out.println( "ready to Notify ");
		this.notify();
		System.out.println( "Notify finsh");
	}
	
	public synchronized void wantToNotifyAll(){
		System.out.println( "ready to NotifyAll ");
		this.notifyAll();
		System.out.println( "NotifyAll finsh");
	}
	
	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		
		final WaitAndNotifyTest w = new WaitAndNotifyTest();
		Thread t1;				
		for(int i = 0 ; i < 10 ; i ++){
			 t1 = new Thread( new WaitAndNotifyProcessor( w , i ) );
			 t1.start();
						
		}
		
		
		Thread.sleep(2000);
		w.wantToNotify();
		Thread.sleep(2000);
		w.wantToNotify();
		Thread.sleep(2000);
		w.wantToNotify();
		Thread.sleep(2000);
		w.wantToNotify();
		Thread.sleep(2000);
		w.wantToNotify();
		
		
		Thread.sleep(2000);
		w.wantToNotifyAll();
//		Thread t2 = new Thread(
//				new Runnable(){
//
//					@Override
//					public void run() {
//						w.wantToNotify();
//						
//					}
//								
//					
//				});
//		
//		t2.start();
	
	}

}




package Thread;

public class WaitAndNotifyProcessor implements Runnable {
	
	private WaitAndNotifyTest w ;
	private int name;
	
	public WaitAndNotifyProcessor( WaitAndNotifyTest w  , int name){
		this.w = w;
		this.name = name;
	}
	
	@Override
	public void run() {
		
		if( name == 0){
			try {
				System.out.println("0 sleep 5000ms");
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		w.wantTowait( name);
	}

}
 

 

分享到:
评论

相关推荐

    Java编程技巧(信号量,管道)

    虽然Java标准库没有直接提供同步互斥结构,但它提供了基于对象锁的`wait()`和`notify()`方法,这使得我们可以实现Dijkstra的计数信号量概念。 信号量是一种在多线程编程中用于控制资源访问的机制。在Java中,可以...

    详细分析java线程wait和notify

    Java中的`wait()`和`notify()`方法是多线程编程中的关键工具,用于线程间的同步和通信。这两个方法都是Object类的成员,这意味着所有Java对象都可以使用它们。`wait()`方法使当前线程暂停执行并释放它持有的锁,直到...

    详解java中的互斥锁信号量和多线程等待机制

    深入剖析 Java 中的互斥锁、信号量和多线程等待机制 Java 编程中,互斥锁和...在 Java 中,我们可以使用 ReentrantLock 和 Semaphore 来实现互斥锁和信号量,并使用 wait() 和 notify() 方法来实现多线程等待机制。

    生产者消费者问题操作系统课程设计思路.ppt

    生产者消费者问题操作系统课程设计思路 本资源是关于操作系统课程设计的生产者消费者...本资源提供了生产者消费者问题操作系统课程设计的思路和解决方案,涵盖了信号量、管程、Java中的wait()和notify()等重要知识点。

    进程同步实验报告

    信号量通过维护一个整数值来控制对共享资源的访问,分为两种类型:互斥信号量(mutex)和通信信号量。在本实验中,我们用到了互斥信号量,它用于保护临界区,确保同一时间只有一个进程能进入。`P()`(Wait)操作会...

    实验二进程调度算法和信号量.pdf

    实验二“进程调度算法和信号量”主要涵盖了操作系统中两个核心概念:进程调度和信号量机制。这个实验的目的是让学习者深入理解这些概念,并通过编程实践来掌握它们的使用。 首先,我们要讨论的是进程调度。在这个...

    信号量PV操作例题李白杜甫下棋.zip

    在C++中,我们可以使用`std::mutex`和`std::condition_variable`来实现信号量,或者使用第三方库如Boost库中的`boost::semaphore`。线程间的同步可以借助`std::unique_lock`和`std::condition_variable::wait()`、`...

    procon.rar_ProCon.d_生产 者- 消费者 问题_生产者

    3. **Java的wait()和notify()方法**:在Java中,对象的wait()方法会让当前线程进入等待状态,直到其他线程调用同一对象的notify()或notifyAll()方法将其唤醒。生产者和消费者可以共享一个对象,通过这个对象的wait()...

    java中线程的有效使用

    本项目聚焦于Java中线程的有效使用,特别关注`wait()`、`notify()`方法的运用,这些方法是Java中实现线程同步的关键工具。 首先,我们要理解Java中的线程同步。当多个线程访问共享资源时,为了避免数据不一致和竞态...

    Java多线程通信机制研究.pdf

    Java多线程通信机制的实现方法包括使用synchronized关键字来实现同步,使用wait()和notify()方法来实现线程间的通信。线程之间的通信是通过共享变量和信号量来实现的。共享变量是指多个线程之间共享的变量,而信号量...

    java sleep和wait的解惑.docx

    ### Java中的sleep与wait详解 #### 一、概述 在Java多线程编程中,`Thread.sleep()` 和 `Object.wait()` 是两个非常重要的方法,它们分别位于 `Thread` 类和 `Object` 类中,用于控制线程的行为。本文将深入探讨这...

    Concurrent_and_Real-Time_Programming_in_Java.rar_java programmin

    在Java中实现RTOS功能,可以使用Java的并发库模拟信号量和互斥量,例如Semaphore和ReentrantLock。任务调度可以通过线程优先级或自定义调度器来实现,但Java标准库并不直接支持抢占式调度,这通常需要依赖于特定的...

    java多线程经典案例

    Java中,可以通过wait()、notify()和notifyAll()这三个Object类的方法来实现线程间的通信。这些方法必须在同步环境中使用,否则会抛出异常。此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,...

    java模拟实现PV操作

    在Java中,我们可以使用内置的`java.util.concurrent`包中的`Semaphore`类来实现PV操作,但这里我们将探讨如何利用`wait()`和`notify()`方法进行模拟。 首先,理解生产者-消费者问题是关键。生产者负责生产数据,而...

    wait()编程wait()编程wait()编程wait()编程

    - 其他如读写锁、信号量等同步机制中,`wait()`也被广泛应用来控制线程的执行顺序。 3. **注意事项**: - 必须在同步代码块(synchronized block)或者同步方法中调用`wait()`,否则会抛出`...

    Java 多线程间的通讯.doc

    在实际编程中,还可以使用Java的并发包(java.util.concurrent)中的工具类,如Semaphore(信号量)、BlockingQueue(阻塞队列)等,它们提供更高级的同步和通信机制,简化了多线程编程中的复杂性。例如,BlockingQueue...

    哲学家算法-java

    我们需要使用同步机制,如synchronized关键字、wait()和notify()方法,或者使用高级的并发工具,如Semaphore(信号量)或ReentrantLock(可重入锁),来确保资源的有序访问,防止死锁的发生。 在Java中实现哲学家...

    JAVA实现线程间同步与互斥生产者消费者问题

    在Java中,我们通常使用以下机制来实现线程同步和互斥: 1. **synchronized关键字**:Java的`synchronized`关键字可以确保同一时间只有一个线程可以访问特定的代码块或方法,从而实现互斥访问。在这个例子中,生产...

    Java多线程教程资料(强烈推荐).docx

    Java 中的线程可以通过多种方式进行交互,如 wait() 和 notify() 方法、join() 方法、LockSupport 类等。wait() 方法可以用于线程等待某个条件的满足,而 notify() 方法可以用于通知其他线程某个条件的满足。join() ...

    Java中的Semaphore:深入理解与应用实践

    Semaphore 是Java并发编程中实现信号量机制的重要工具。它通过维护一个许可集来控制同时访问特定资源的线程数量,从而避免资源竞争和潜在的性能问题。通过合理使用 Semaphore,可以有效地管理多线程对共享资源的访问...

Global site tag (gtag.js) - Google Analytics