看JAVA方面的书时遇到这样一个JAVA程序: 
package login; class waitNOtifyDemo { 
public static void main(String[ ] args){ 
MessageBoard m=new MessageBoard( ); //构造共享的信息板对象 
Reader readfrom_m=new Reader(m); 
Writer writeto_m=new Writer(m); 
readfrom_m.start( ); 
writeto_m.start( ); 

} class MessageBoard{ 
private String message; 
private boolean ready=false; 
public synchronized String read( ){ 
while(ready==false){ 
try { wait( );} 
catch (InterruptedException e){ } 

ready=false; 
notify( ); 
return message; 

public synchronized void write(String s){ 
while(ready==true){ 
try { wait( );} catch (InterruptedException e){ } } 
message=s; ready=true; notify( ); 

} class Reader extends Thread { 
private MessageBoard mBoard; 
public Reader(MessageBoard m){ 
mBoard=m; 

public void run(){ 
String s=""; 
boolean reading=true; 
while(reading){ 
s=mBoard.read(); 
System.out.println("Reader read:"+s); 
if(s.equals("logoff")) reading=false;} 
System.out.println("Finished :10 seconds..."); 
try{ sleep(1000);} 
catch(InterruptedException e){} 

} class Writer extends Thread{ 
private MessageBoard mBoard; 
private String messages[]={ 
"星期一 :---------------------------", 
"星期二 :---------------------------", 
"星期三 :---------------------------", 
"星期四 :---------------------------", 
"星期五 :---------------------------", 
"星期六 :---------------------------", 
"星期日 :---------------------------" 
}; 
public Writer (MessageBoard m){ 
mBoard=m; 

public void run(){ 
for(int i=0;i<messages.length;i++){ 
mBoard.write(messages[i]); 
System.out.println("Writer wrote:"+messages[i]); 
try{sleep((int)(Math.random()*100));} 
catch(InterruptedException e){} 

mBoard.write("logoff"); 


这样一个多线程程序, 
但是根据我对此程序的理解与运行结果不一样: 
本人理解如下: 
(1) 在类waitNOtifyDemo中启动两个线程readfrom_m.start( ); writeto_m.start( ); 
(2) 首先启动readfrom_m.start( );线程,调用类 MessageBoard中的 read( )函数而进入wait( ),而使线程进入阻塞. 
(3) 然后writeto_m.start( )启动,调用类 MessageBoard中的 write(String s)函数, 虽然有 notify( )唤醒wait( ), 即readfrom_m.start( )从阻塞中被唤醒,但也只是从阻塞变成就绪,writeto_m.start( )仍然占用CPU, 
(4) writeto_m继续执行,会输出 
Writer wrote:星期一 :--------------------------- 
(5) 在循环中,writeto_m进入wait( ),而readfrom_m从就丛就绪进入CPU进而占用CPU,因此输出 
Reader read:星期一 :--------------------------- 
(6) 依次类推,本人的输出结果为 
Writer wrote:星期一 :--------------------------- Reader read:星期一 :--------------------------- Writer wrote:星期二 :--------------------------- Reader read:星期二 :--------------------------- Reader read:星期三 :--------------------------- Writer wrote:星期三 :--------------------------- Writer wrote:星期四 :--------------------------- Reader read:星期四 :--------------------------- Writer wrote:星期五 :--------------------------- Reader read:星期五 :--------------------------- Writer wrote:星期六 :--------------------------- Reader read:星期六 :--------------------------- Writer wrote:星期日 :--------------------------- Reader read:星期日 :--------------------------- Reader read:logoff Finished :10 seconds... 但是,运行结果为: 
Reader read:星期一 :--------------------------- Writer wrote:星期一 :--------------------------- Reader read:星期二 :--------------------------- Writer wrote:星期二 :--------------------------- Writer wrote:星期三 :--------------------------- Reader read:星期三 :--------------------------- Reader read:星期四 :--------------------------- Writer wrote:星期四 :--------------------------- Reader read:星期五 :--------------------------- Writer wrote:星期五 :--------------------------- Writer wrote:星期六 :--------------------------- Reader read:星期六 :--------------------------- Writer wrote:星期日 :--------------------------- Reader read:星期日 :--------------------------- Reader read:logoff Finished :10 seconds... 不知道我的错误理解在什么地方?? 
请高手指点, 
注: 清高手指点我应该注意的地方, 并且请多讲一下在多线程中要注意的问题, 
多深入讲一下关于多线程的问题!!!!!!! 
不胜感激 不胜感激 
不胜感激 不胜感激 
不胜感激 不胜感激 
不胜感激 不胜感激 
不胜感激 不胜感激 
不胜感激 不胜感激 
不胜感激 不胜感激 
另外,请高手指点完以后请留下电子邮件,以防本人遇到其他问题时可以及时请教,本人将不胜感激 
本人电子邮件:[email protected]