-1
class A extends Thread { 
    ThreadDemo demo; 
    public A(ThreadDemo td) { 
        demo = td; 
    } 
    public void run() { 
        demo.doSomething(); 
    } 
}
public class ThreadDemo { 
    int count = 1; 
    public synchronized void doSomething() { 
        for (int i = 0; i < 10; i++) 
            System.out.println(count++); 
    } 
    public static void main(String[] args) { 
        ThreadDemo demo = new ThreadDemo(); 
        A a1 = new A(demo); 
        A a2 = new A(demo); 
        a1.start(); 
        a2.start(); 
    } 
}   

1.想知道这段代码中这个构造函数的需要。并解释演示参考如何在 A 类中工作

ps:我是这个概念的新手,所以请帮助我提供你宝贵的答案!提前谢谢!

4

1 回答 1

2

1.为什么demo obj被传入A类?

因为您已经定义了 A 类的构造函数。

public A(ThreadDemo td) 
{ 
    demo = td; 
} 

2.如果我替换 A a1 = new A(demo); with Thread a1 = new Thread(demo); 它会产生构造函数 Thread.Thread(ThreadGroup,Runnable,String,long) 不适用(实际参数列表和形式参数列表的长度不同)为什么会出现这个错误?

因为 Thread 类不以 ThreadDemo 类的对象作为参数。但是使用多态性你可以做类似的事情

Thread a1 = new A(demo);

3.为什么他们在A类中传递demo作为参考

我认为您打算问why they are passing the same reference in both the threads或答案与第一个问题相同。它们传递相同的引用,因此只有一个线程可以对 ThreadDemo 类的 doSomething() 方法进行操作(可能目标是演示同步)。

于 2013-09-30T13:17:33.087 回答