package test;public class Test {
public static void main(String args[]){
Test2 test = new Test2();
new Thread(test).start();
new Thread(test).start();
new Thread(test).start();
new Thread(test).start();
}
}
class Test2 implements Runnable{
public void run(){
int i = 100;
while(true){
if(i > 0 ){
System.out.println("i="+i+"ThreadName="+Thread.currentThread().getName());
i--;
}
}
}
}我是看着例子做的.
在例子上输出结果时四个线程共享了一个i
而我写的确是每个线程都自己有一个i,而不是共享的,问下咋回事啊.
要让多个线程共享数据要怎么做啊.

解决方案 »

  1.   

    Test2 test = new Test2(); 
    new Thread(test).start(); 
    test = new Test2(); 
    new Thread(test).start();
    test = new Test2();  
    new Thread(test).start(); 
    test = new Test2(); 
    new Thread(test).start(); 
      

  2.   

    把int i=100放在run方法外边
      

  3.   

    用Synchronized进行同步。不过同步后性能会下降。如果只是i=100,可以把int i=100放在public void run(){ 前面。线程数比较少的情况下基本上也可以保持同步。
      

  4.   

    package test;public class Test {
    public static void main(String args[]) {
    Test2 test = new Test2();
    new Thread(test).start();
    new Thread(test).start();
    new Thread(test).start();
    new Thread(test).start();
    }
    }class Test2 implements Runnable {
    int i = 100;
    public void run() {

    while (true) {
    if (i > 0) {
    System.out.println("i=" + i + "ThreadName="
    + Thread.currentThread().getName());
    i--;
    }
    }
    }
    }