`
liuInsect
  • 浏览: 131813 次
  • 性别: 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(),可以用来设计信号量类:mySemaphore,它是按照Dijkstra提出的计数信号量的...

    java高并发相关知识点.docx

    并发控制:Java中的并发控制机制,包括信号量、原子变量、倒计时等。 线程安全:Java中的线程安全,包括同步方法和同步块等。 死锁:Java中的死锁,包括如何避免死锁和如何解除死锁。 性能优化:Java中的性能优化,...

    这就是标题—— JUC.pdf

    wait()、notify()和notifyAll() 虚假唤醒 Condition 定制化通信 多线程锁 并发下的集合类 List Set Map Callable接口 线程创建的方式 callable / runnable FutureTask JUC常用辅助类 CountDownLatch (减少计数器) ...

    UNIX网络编程 卷2:进程间通信

     10.16 使用System V信号量实现Posix信号量 218  10.17 小结 224  习题 225  第11章 System V 信号量 226  11.1 概述 226  11.2 semget函数 227  11.3 semop函数 229  11.4 semctl函数 231  11.5 简单的...

    UNIX网络编程 卷2 进程间通信 带完整书签,完整目录

    10.16 使用System V信号量实现Posix信号量 218 10.17 小结 224 习题 225 第11章 System V信号量 226 11.1 概述 226 11.2 semget函数 227 11.3 semop函数 229 11.4 semctl函数 231 11.5 简单的程序 232 ...

    《UNIX网络编程 第2版. 第2卷, 进程间通信(中文版)》(W·Richard Stevens[美] 著)

    10.16 使用System V信号量实现Posix信号量 218 10.17 小结 224 习题 225 第11章 System V 信号量 226 11.1 概述 226 11.2 semget函数 227 11.3 semop函数 229 11.4 semctl函数 231 11.5 简单的程序 232 11.6 文件上...

    UNIX网络编程 第2卷 进程间通信

    10.16 使用System V信号量实现Posix信号量 218 10.17 小结 224 习题 225 第11章 System V 信号量 226 11.1 概述 226 11.2 semget函数 227 11.3 semop函数 229 11.4 semctl函数 231 11.5 简单的程序 232 11.6 文件上...

    javaSE代码实例

    17.4 信号量的使用 393 17.4.1 Semaphore类简介 393 17.4.2 Semaphore类的具体使用 394 17.5 队列 396 17.5.1 Queue接口介绍 396 17.5.2 PriorityQueue类的知识与使用 397 17.5.3 BlockingQueue接口...

    threadpp:轻量级跨平台线程互斥实现,包括 win32、win8、linux、macOS、iOS、android

    线程 轻量级跨平台线程/互斥体实现,包括 win32、win8、linux、...//wait-notify范式,3秒后会被main唤醒 printf("来自线程的你好:%llu\n",thread::current_thread_id()); l.unlock(); } int main(int argc,const

    java核心知识点整理.pdf

    25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 ......................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    Threads:常见的多线程实用程序的集合

    线程数常见的多线程实用程序的集合BlockingQueue_util callable_future死锁扩展线程实现可运行的线程间通信通讯lock_objects low_level_synchronization_wait_notify reentrant_lock信号量静态方法同步synchronized_...

    TCP_IP详解卷1

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

    TCPIP详解卷[1].part04

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

    TCPIP详解卷[1].part09

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

    TCPIP详解卷[1].part03

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

    TCPIP详解卷[1].part05

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

    TCPIP详解卷[1].part06

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

    TCP/IP详解part_2

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

    TCPIP详解卷[1].part08

    12.4.3 FDDI和令牌环网络中的多播 134 12.5 小结 134 第13章 IGMP:Internet组管理协议 136 13.1 引言 136 13.2 IGMP报文 136 13.3 IGMP协议 136 13.3.1 加入一个多播组 136 13.3.2 IGMP报告和查询 137 13.3.3 实现...

Global site tag (gtag.js) - Google Analytics