袁老师:欢迎回到《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的标签,那么你怎么回答呢???。有点意思,这个袁老师太需要学生了,有木有~】
"预知详解,请点这里"--袁老师说完扬长而去...