现在的位置: 首页 > 综合 > 正文

Java多线程–传统线程间的通信

2014年05月08日 ⁄ 综合 ⁄ 共 1386字 ⁄ 字号 评论关闭
袁老师:欢迎回到《Java多线程课堂》,这里是...
【袁老师好像意识到不正常了,眼前还是一个学生都木有,停顿了一会儿...其实没有学生才是正常的,这次他来到了一个被废弃了好久的课堂来】
袁老师:继续我们的多线程讲堂,我们今天学习一下传统线程间的通信(称之为传统是因为后期将有Java5后的多线程应用)。
【声音越来越小,是木有激情在木有学生的课堂讲课吗?还是这节课内容太少?或者是只写代码?...顿时之间袁老师拿起粉笔有开始画画了,不一会儿...】
/**
 * 传统的多线程通信
 * 
 * @author ysjian
 * @version 1.0
 * @email ysjian_pingcx@126.com
 * @QQ 646633781
 * @telephone 18192235667
 * @csdnBlog http://blog.csdn.net/ysjian_pingcx
 * @createTime 2014-1-5
 * @copyRight Merit
 */
public class TraditionalCommunicationDemo {

	public static void main(String[] args) {
		final Service service = new Service();
		new Thread(new Runnable() {
			@Override
			public void run() {
				for (int i = 1; i <= 25; i++) {
					service.teacherAsk();

				}
			}
		}).start();
		for (int i = 1; i <= 25; i++) {
			service.studentAnswer();
		}
	}
}
class Service {
	private boolean isShouldStu = false;
	public synchronized void teacherAsk() {
		while (isShouldStu) { // while用于防止假唤醒
			try {
				wait();// 调用wait方法的线程必须是当前监视器的所有者,这里是this
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("Teacher:1 + 1 = ?");
		isShouldStu = true;
		notify();
	}
	public synchronized void studentAnswer() {
		while (!isShouldStu) {
			try {
				wait(); // 调用wait方法的线程必须是当前监视器的所有者,这里是this
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		int result = new Random().nextInt(5);
		System.out.println("Student:1 + 1 = " + result + "["
				+ (2 != result ? "clever" : "stupid") + "]");
		isShouldStu = false;
		notify();
	}
}

【仔细揣摩一下这些代码,老师问了25次“1 + 1 = ?”,学生回答了25次“1 + 1 = ?”,而且是老师问一次,学生回答一次,并且按常规答题的学生被赋予了stupid的标签,那么你怎么回答呢???。有点意思,这个袁老师太需要学生了,有木有~】

"预知详解,请点这里"--袁老师说完扬长而去...

抱歉!评论已关闭.