问个继承与接口的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 01:07:04
为什么你想要的结果应该是创建4个线程,要4个线程共同完成index值变化且没有重复的过程。采用接口,就相当于为同一个任务开辟了4个线程,4个线程共同完成任务。而用继承,则4个线程不相关,各自运行,达不到合作的效果呢?
1、
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}
class MyThread implements Runnable
{
int index=0;
public void run()
{
while(true)
{
System.out.println(Thread.currentThread().getName()+":"+index++);
}
}
}
2
class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
mt.start();
mt.start();
mt.start();
mt.start();
}
}
class MyThread extends Thread
{
int index=0;
public void run()
{
while(true)
{
System.out.println(getName()+":"+index++); <

在你的继承里用了4个“mt.start();”这跟1个“mt.start();”的效果是一样的!就是1个线程在跑!
按理来说应该这样写:
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
MyThread mt3=new MyThread();
MyThread mt4=new MyThread();
mt1.start();
mt2.start();
mt3.start();
mt4.start();
继承的那个程序每一个线程类的对象里都有index变量的值所以没办法达到同一变量的共享的目的。

而你实现接口的类里用了4个“new Thread(mt).start(); ”这才是真正的4个线程!虽然是4个线程,但是Thread(mt)的参数是同一个MyThread对象,所以访问的index变量也是同一个。