1

ここで私のコードでは、この setMultiLegNetQuote() メソッドは 1 つのスレッドにあり、強調表示されたブロックが表示されている場合は、他のスレッドを呼び出しています..

私の質問は..

(1) この最初のスレッドは以下のように呼び出されます...

Thread t = custStreamerMap.get(mmsg.getCustomerId());
if (null != t) {
            return t.setQuote(mmsg.getMessageBody());
        }

この場合、thred オブジェクトを作成するのではなく、t.setQuote(mmsg.getMessageBody()); を直接呼び出すときにスレッド実行メソッドが呼び出されるかどうか。

synchronized int setQuote(String multiLegData) {

                            NetQuoteTuple netQuoteTuple = new NetQuoteTuple();                          
                            if (some checking) { 
                                netQuoteTuple.setSide(1);
                            } else if (some checking) {
                                netQuoteTuple.setSide(2);
                            }
                            netQuoteList.add(netQuoteTuple);                        
                    **dataBufferThread.setNetQuoteList(netQuoteList);
                    dataBufferThread.setCnt(20000);**
                    return 1;
    }

(2) 次に、dataBufferThread は、最初のスレッドから 2 番目のスレッドが呼び出されることを意味します。この方法でスレッドを呼び出すと、2 番目のスレッドの run メソッドが呼び出されるかどうか。

dataBufferThread.setNetQuoteList(netQuoteList) ??????????

そして、これdataBufferThread.setCnt(20000); はスレッドの場合はどうなりますか? これは、このように宣言された AtomicInteger ですAtomicInteger cnt = new AtomicInteger(0)

ここで、実際には、この dataBufferThread と Thread は両方とも、Thread を拡張する run メソッドを持つ個別のスレッドです...

それが、スレッドのオブジェクトを作成し、そのメソッドにアクセスするかどうかを尋ねた理由です...スレッドの実行メソッドが呼び出されるかどうか?

4

1 に答える 1

3

Threadこれは便利というよりも混乱を招く可能性が高いため、あなたが としても説明しているオブジェクトは使用しません。

Threadそれを呼び出すa の唯一のメソッドは、start() その時点から独立して実行されます。

  1. これにより、オブジェクトのメソッドが呼び出されThreadます。これはそのスレッドに対して何もしませんし、実行している必要さえありません。

    return t.setQuote(mmsg.getMessageBody());
    
  2. 2 つの値を設定するだけで、それ以上のことはありません。同様にスレッドを巻き込むことは、私見を混乱させるだけです。

于 2012-09-10T10:42:15.700 に答える