public class ww
{
  public static void main(String[] args) 
 { 
  TestThread t=new TestThread();
  new Thread(t).start();
  new Thread(t).start();
  new Thread(t).start();
 
 } 
} class TestThread extends Thread
{
public void run()
{
int i=20;
while(i>0)
{
i--;
System.out.println(i+"   "+this.isAlive()+"   "+Thread.currentThread().isAlive());

}
}
}
运行结果是:19   false   true
18   false   true
17   false   true
16   false   true
15   false   true
14   false   true
13   false   true
12   false   true
11   false   true
10   false   true
9   false   true
8   false   true
7   false   true
6   false   true
5   false   true
4   false   true
3   false   true
2   false   true
1   false   true
0   false   true
19   false   true
18   false   true
17   false   true
16   false   true
15   false   true
14   false   true
13   false   true
12   false   true
11   false   true
10   false   true
9   false   true
8   false   true
7   false   true
6   false   true
5   false   true
4   false   true
3   false   true
2   false   true
1   false   true
0   false   true
19   false   true
18   false   true
17   false   true
16   false   true
15   false   true
14   false   true
13   false   true
12   false   true
11   false   true
10   false   true
9   false   true
8   false   true
7   false   true
6   false   true
5   false   true
4   false   true
3   false   true
2   false   true
1   false   true
0   false   true这三个线程应该可以共享同一段代码,共同操作资源啊,比如字段i,但是程序输出结果却不是这样,
这是为什么???

解决方案 »

  1.   

    i为类的属性时才能被方法共享吧
    另外考虑到数据共享应该用临界区。
    代码:public class ww { 
    public static void main(String[] args){  
    TestThread t=new TestThread(); 
    new Thread(t).start(); 
    new Thread(t).start(); 
    new Thread(t).start(); 
    }  
    }  class TestThread extends Thread { 
    int i=20;
    public synchronized void run(){ 
    while(i>0){ 
    i--; 
    System.out.println(i+"   "+this.isAlive()+"   "+
                                               Thread.currentThread().isAlive()); 


    }
    去掉synchronized你就会看到多个线程产生的冲突,尤其在时间切片比较平凡的jdk6下。
      

  2.   

    synchronized 是实现线程同步的关键字
      

  3.   

    TestThread t=new TestThread(); 
      new Thread(t).start(); 
      new Thread(t).start(); 
      new Thread(t).start(); 可能不能这样写,不能调用同个t吧,等高手来讲解
      

  4.   

    1楼正解!this is why? = 这是为什么?哈哈,Chinglish啊!
      

  5.   

    要看到冲突,得将i弄成类的静态变量,并保证run方法中不被重新赋值