java多线程之线程通信

线程的通信时在synchronized里实现的

Object类的wait()、notify() 、notifyAll()三个方法必须由同步监视器对象来调用,分两种情况:

a)同步方法,该类默认实例(this)就是同步监视器,可以在同步方法中可以直接调用

b)同步代码块,同步监视器是synchronized后括号里的对象,所以必须使用此对象调用这三个方法

wait() 与 notify() 和 notifyAll()

wait():令当前线程挂起并放弃CPU、同步资源。会释放锁
notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
notifyAll ():唤醒正在排队等待资源的所有线程结束等待
Java.lang.Object提供的这三个方法只有在synchronized方法或synchronized代码块中才能使用,否则会报java.lang.IllegalMonitorStateException异常

使用两个线程打印 1-100. 线程1, 线程2 交替打印

package com.ghl.demo;

class Communication implements Runnable {
	int i = 1;

	public void run() {
		while (true) {
			synchronized (this) {
				notify();//唤醒正在等待的线程
				if (i <= 100) {
					System.out.println(Thread.currentThread().getName() + ":" + i++);
				} else
					break;
				try {
					wait();//当前线程挂起 释放cpu资源 给下一个线程进行访问
				} catch (InterruptedException e) {
				}
			}
		}
	}
}

public class PrinNum {
	public static void main(String[] args) {
		Communication co=new Communication();
		Thread th=new Thread(co);
		Thread th1=new Thread(co);
		th.setName("甲方");
		th1.setName("乙方");
		th.start();
		th1.start();
		
	}
	
}

返回结果

甲方:1
乙方:2
甲方:3
乙方:4
甲方:5
乙方:6
甲方:7
乙方:8
甲方:9
乙方:10
甲方:11
乙方:12
甲方:13
乙方:14
甲方:15
乙方:16
甲方:17
乙方:18
甲方:19
乙方:20
甲方:21
乙方:22
甲方:23
乙方:24
甲方:25
乙方:26
甲方:27
乙方:28
甲方:29
乙方:30
甲方:31
乙方:32
甲方:33
乙方:34
甲方:35
乙方:36
甲方:37
乙方:38
甲方:39
乙方:40
甲方:41
乙方:42
甲方:43
乙方:44
甲方:45
乙方:46
甲方:47
乙方:48
甲方:49
乙方:50
甲方:51
乙方:52
甲方:53
乙方:54
甲方:55
乙方:56
甲方:57
乙方:58
甲方:59
乙方:60
甲方:61
乙方:62
甲方:63
乙方:64
甲方:65
乙方:66
甲方:67
乙方:68
甲方:69
乙方:70
甲方:71
乙方:72
甲方:73
乙方:74
甲方:75
乙方:76
甲方:77
乙方:78
甲方:79
乙方:80
甲方:81
乙方:82
甲方:83
乙方:84
甲方:85
乙方:86
甲方:87
乙方:88
甲方:89
乙方:90
甲方:91
乙方:92
甲方:93
乙方:94
甲方:95
乙方:96
甲方:97
乙方:98
甲方:99
乙方:100

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值