-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: 私はこの概念に慣れていないので、貴重な情報を教えてください! 事前にt​​hnx!

4

1 に答える 1

2

1. なぜデモ obj がクラス A に渡されるのですか?

クラスAのコンストラクターがそのように定義されているためです。

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

2.if i replace A a1 = new A(demo); スレッド a1 = 新しいスレッド (デモ); コンストラクター Thread.Thread(ThreadGroup,Runnable,String,long) は適用されません (実際の引数リストと仮引数リストの長さは異なります) なぜこのエラーが表示されるのですか?

Thread クラスは ThreadDemo クラスのオブジェクトをパラメーターとして取りません。ただし、ポリモーフィズムを使用すると、次のようなことができます

Thread a1 = new A(demo);

3.クラスAで参照としてデモを渡す理由

私はあなたが尋ねるつもりだったと思いますwhy they are passing the same reference in both the threadsか、答えは最初の質問と同じです. それらは同じ参照を渡しているため、ThreadDemo クラスの doSomething() メソッドで操作できるスレッドは 1 つだけです (おそらく、同期のデモンストレーションが目的でした)。

于 2013-09-30T13:17:33.087 に答える