public class Demo02
{
public static void main(String args[]){
Runnable mt = new MyThread();
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt);
Thread t3 = new Thread(mt); t1.start();
t2.start();
t3.start();

}
}class MyThread implements Runnable{
private int piao = 100;

public void run(){
for (int i=0;i<200 ;i++ )
{if(piao>0)
System.out.println(this + "卖票 ——" + (piao--));
}
}
}改成:
public class Demo02
{
public static void main(String args[]){
Runnable mt = new MyThread();
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt);
Thread t3 = new Thread(mt); t1.start();
t2.start();
t3.start();

}
}class MyThread extends Thread{
private int piao = 100;

public void run(){
for (int i=0;i<200 ;i++ )
{if(piao>0)
System.out.println(this + "卖票 ——" + (piao--));
}
}
}

改后的程序 为什么也能实现资源共享?

解决方案 »

  1.   

    资源共享是和线程没有关系的,对于java代码来说,domain是界限
      

  2.   

    程序改之前跟改之后是完全一样的。Thread t1 = new Thread(mt); 
    上面这一句Thread的构造函数接收的是Runnable类型。你MyThread extends Thread达到了implements Runnable的效果,因为Thread implements Runnable。随便说一下,你的程序是有问题的。
    正常情况下,多线程程序对于共享资源(这里是piao)的修改必须做同步。