Java 不清楚这个线程的概念 类A扩展线程{ 线程演示; 公众谘询委员会{ demo=td; } public void run(){ demo.doSomething(); } } 公共类ThreadDemo{ 整数计数=1; 公共同步的void doSomething(){ 对于(int i=0;i

Java 不清楚这个线程的概念 类A扩展线程{ 线程演示; 公众谘询委员会{ demo=td; } public void run(){ demo.doSomething(); } } 公共类ThreadDemo{ 整数计数=1; 公共同步的void doSomething(){ 对于(int i=0;i,java,synchronization,Java,Synchronization,1.想知道此代码中此构造函数的需要。并解释演示参考如何在A类中工作 p、 s:我对这个概念还不熟悉,所以请帮我做一些有价值的事情! 提前通知 1.为什么演示obj被传入A类? 因为你已经定义了类A的构造函数 class A extends Thread { ThreadDemo demo; public A(ThreadDemo td) { demo = td; } public void run() { demo.do

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

p、 s:我对这个概念还不熟悉,所以请帮我做一些有价值的事情!
提前通知

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

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

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(); 
    } 
}   
2.如果我更换a1=新A(演示);带螺纹a1=新螺纹(演示);它将生成构造函数线程。线程(ThreadGroup、Runnable、String、long)不适用(实际参数列表和形式参数列表长度不同)为什么会出现此错误?

因为Thread类不将ThreadDemo类的对象作为参数。但是,使用多态性可以执行以下操作

public A(ThreadDemo td) 
{ 
    demo = td; 
} 
3.为什么他们要通过演示作为A类参考


我想您是想问
为什么它们在两个线程中传递相同的引用
,或者答案与第一个问题相同。它们传递相同的引用,因此只有一个线程可以对ThreadDemo类的doSomething()方法进行操作(可能目的是演示同步)。

您要问的问题根本不是关于线程,而是关于对象及其工作方式。您必须对该问题有最低限度的理解。我建议您阅读一些关于Java的一般知识。也许吧:谢谢兄弟yur ans no.2的帮助,还有一个疑问是当类A obj创建时构造函数是如何工作的。并解释此代码中此构造函数的必要性当创建类的任何实例时,会调用相应的构造函数。如果使用super()未从构造函数(第1行)显式调用超类构造函数,则java编译器将调用默认构造函数作为给定构造函数的第1行。在您的情况下,您将创建一个新的类a对象作为新的a(demoObjectYouCreated),因此它将调用相应的构造函数public a(ThreadDemo td)你们班的学生。请注意,如果您指定了一个参数化(非默认)构造函数,那么编译器将不会为您创建默认构造函数。至于为什么在类a中需要这样的构造函数,您必须读取同步。Google it!简单地说,您有一个公共对象,可以在该对象上同步方法(基本上可以将其视为锁)。只有一个线程可以执行这些同步方法(一次只有多个线程可以获取对象监视器)。
Thread a1 = new A(demo);