在我的代码中,这个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);
在线程的情况下做了什么?这是一种以AtomicInteger cnt = new AtomicInteger(0)
这里实际上这个dataBufferThread和Thread都是单独的线程,运行方法扩展了Thread ...
这就是我问我们是否为线程创建一个对象并访问它的一些方法的原因...是否调用了线程的run方法?
答案 0 :(得分:3)
我不会使用你也称为Thread
的对象,因为这更容易让人感到困惑而不是有用。
调用它的Thread
上唯一的方法是start()
从那时起它就会独立运行。
这会调用Thread
对象上的方法。这对该线程没有任何作用,甚至不必运行。
return t.setQuote(mmsg.getMessageBody());
您所做的只是设置两个值,仅此而已。涉及线程也只是让IMHO感到困惑。