本帖最后由 李贺晓 于 2012-11-14 16:38 编辑
在一本资料上看到说是创建多线程类是继承Thread类的话,此方法创建的多条线程不可共享线程类的的实例属性
而通过implements实现Runnable接口时,此方法创建的多条线程是可以共享线程类的实例属性的
继承:
class FirstThread extends Thread
{
private int i;
public void run()//重写run方法
{
for(int i=0;i<100;i++)
{
//当线程类继承Thread时,可以直接调用getName()方法来获取当前线程的名称
//如果想获取当前线程的名称,用this即可
System.out.println(this.getName()+"......."+i);
}
}
public static void main(String[] args)
{
for(int i=0;i<100;i++)
{
//调用Thread的currentThread()方法获取当前线程
System.out.println(Thread.currentThread().getName()+".."+i);
if(i==20)
{
//创建并启动第一条线程
new FirstThread().start();
//创建并启动第二条线程
new FirstThread().start();
}
}
}
}
实现:
class SecondThread implements Runnable
{
private int i;
public static void main(String[] args)
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"======"+i);
if(i==20)
{
SecondThread st=new SecondThread();
new Thread(st,"线程one").start();
new Thread(st,"线程two").start();
}
}
}
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"-------"+i);
}
}
}
按资料说上的,第二种方法运行后应该出现的结果是线程one和线程two两者是共享i值的,但是运行的结果两种方法是一样的,都是随机出现的,第二种也是每个线程都是从0到100,线程one和线程two并没有共享i,这个是怎么回事?是资料上错误了,还是我的程序有问题
按资料上说第二种方法的运行结果应该是这样的
|
|