JAVA高级基础(76)---线程通信

线程通信

线程由运行到阻塞 再到就绪

主要用到的方法

Object类中的

  1. wait()//时线程处于等待状态,如果没有线程来唤醒 那么该线程将一直处于等待状态,直到有线程调用notify /notifyAll来唤醒该线程。
  2. wait(long  min); 也会是线程处于等待状态;线程重新回到就绪状态的条件:一 、等到的时间到  二、 有线程调用notify /notifyAll来唤醒该线程
  3. notify():唤醒当前处于等待状态的所有线程中的随机的一个
  4. notifyAll():唤醒当前处于等待状态的所有的线程

 在线程通信中,首先要保证线程执行的任务时同步的(可以时同步代码块/也可以时同步方法)

在线程通信中,有谁来执行wait和notify?

在其中只能有锁对象来执行wait和notify

package org.lanqiao.thread.demo;

/*
 * 要求:在线程执行输出的时候,太原师范和蓝桥软件轮流输出
 * 
 */
public class ThreadDemo {
	static boolean flag = false;
	public static void main(String[] args) {
		Object obj  = new Object();
		
		new Thread() {
			public void run() {
				
				while(true) {
					synchronized (obj) {
						if(flag) {
							try {
								obj.wait();
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							
						}
						
						System.out.print("太");
						System.out.print("原");
						System.out.print("师");
						System.out.print("范");
						System.out.println();
						flag = true;
						obj.notifyAll();
					}
				}
				
			}
			
		}.start();
		new Thread() {
			public void run() {
				while(true) {
					synchronized (obj) {
						if(!flag) {
							try {
								obj.wait();
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							
						}
						
						System.out.print("蓝");
						System.out.print("桥");
						System.out.print("软");
						System.out.print("件");
						System.out.println();
						flag = false;
						obj.notifyAll();
					}	
				}
				
				
			}
			
		}.start();
		new Thread() {
			public void run() {
				while(true) {
					synchronized (obj) {
						if(!flag) {
							try {
								obj.wait();
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							
						}
						
						System.out.print("山");
						System.out.print("西");
						System.out.print("晋");
						System.out.print("中");
						System.out.println();
						flag = false;
						obj.notifyAll();
					}	
				}
				
				
			}
			
		}.start();
	}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值