Java多线程交替打印1到10

NumberRunnableImpl

package com.wait;
/**
 * 本文作者:谷哥的小弟 
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
class NumberRunnableImpl implements Runnable {
	private int number = 1;
	private Object lock = new Object();
	@Override
	public void run() {
		while (true) {
			synchronized (lock) {
				// 调用notify()唤醒阻塞的线程
				lock.notify();
				if (number <= 10) {
					String threadName = Thread.currentThread().getName();
					System.out.println(threadName + "打印数字" + number);
					number++;
					try {
						// 调用wait()进入阻塞状态并且释放锁
						lock.wait();
						// 线程唤醒后继续执行以下代码
						threadName = Thread.currentThread().getName();
						System.out.println(threadName + "完成本次打印");
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} else {
					break;
				}
			}
		}
	}
}

 Test

package com.wait;
/**
 * 本文作者:谷哥的小弟 
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
public class Test {

	public static void main(String[] args) {
		NumberRunnableImpl numberRunnableImpl = new NumberRunnableImpl();
		
		Thread thread1 = new Thread(numberRunnableImpl);
		thread1.setName("线程1");

		Thread thread2 = new Thread(numberRunnableImpl);
		thread2.setName("线程2");
		
		thread1.start();
		thread2.start();
	}

}

运行结果

 

小结

1、调用wait()进入阻塞状态并且释放锁

2、调用notify()唤醒阻塞的线程

3、流程与理解:线程1打印数字后执行lock.wait()方法线程1进入阻塞状态并释放锁;线程2进入run方法后调用notify()唤醒阻塞的线程1,线程1继续执行直至完成;当线程2打印数字后执行lock.wait()方法线程2进入阻塞状态并释放锁...依次类推

4、锁、锁.wait()、锁.nofity()这三处必须是同一个锁(监视器)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷哥的小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值