编写了一段多线程的代码,但是运行结果怪怪的:
class Suibian extends Thread
{
static int i;
public Suibian(String name){
super(name);
}
public synchronized void run(){
 if(i==0){
for(int j=0;j<10;j++){
i++;
if(j == 0){
System.out.println("线程" + Thread.currentThread().getName() + "启动:");
}
System.out.println("线程" + Thread.currentThread().getName() + "正在运行:");//(1)
System.out.println("i=" + i);
if(i==4){
try{
System.out.println("线程停止");
    this.wait();
}
catch(Exception e){}
}
}
 }
if(i!=0){
System.out.println( "线程" + Thread.currentThread().getName()+"运行:"+"i="+ i +";");
this.notifyAll();
i=i+1;
}
}public static void main(String[] args){
Suibian sb = new Suibian("t1");
    Suibian sc = new Suibian("t2");
sb.start();
//sb.start();
sc.start();
//sc.start();
}
}运行结果:线程t1启动:
线程t1正在运行:
i=1
线程t1正在运行:
i=2
线程t1正在运行:
i=3
线程t1正在运行:
线程t2运行:i=4;
i=5
线程t1正在运行:
i=6
线程t1正在运行:
i=7
线程t1正在运行:
i=8
线程t1正在运行:
i=9
线程t1正在运行:
i=10
线程t1正在运行:
i=11
线程t1运行:i=11;怪异之处在
线程t1正在运行:
线程t2运行:i=4;
i=5
这里为什么没有先执行System.out.println("i=" + i);而直接跑去执行线程t2了.还有删除//(1)标志的这一句,将不能唤醒线程1?