1

在我的代码中,这个 setMultiLegNetQuote() 方法在一个线程中,然后如果您看到突出显示的块,它正在调用另一个线程..

我的问题是..

(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 我的意思是从第一个线程调用第二个线程。当我们这样调用线程时,是否调用了第二个线程的run方法?

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

然后这dataBufferThread.setCnt(20000); 在线程的情况下会做什么?这是一个以这种方式声明的 AtomicIntegerAtomicInteger cnt = new AtomicInteger(0)

这里实际上这个 dataBufferThread 和 Thread 都是单独的线程,运行方法扩展了 Thread ...

这就是我问我们是否为线程创建一个对象并访问它的某些方法的原因......是否调用了线程的运行方法?

4

1 回答 1

3

我不会使用您也描述为 a 的对象,Thread因为这更有可能令人困惑而不是有用。

Thread调用它的唯一方法是start() 从那一点开始它独立运行。

  1. 这会调用Thread对象的方法。这对该线程没有任何作用,甚至不必运行。

    return t.setQuote(mmsg.getMessageBody());
    
  2. 您所做的只是设置两个值,仅此而已。涉及一个线程也只是混淆恕我直言。

于 2012-09-10T10:42:15.700 回答