在我的代码中,这个 setMultiLegNetQuote() 方法在一个线程中,然后如果您看到突出显示的 block ,它正在调用另一个线程..
我的问题是..
(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 AtomicInteger cnt = new AtomicInteger(0)
这里实际上这个 dataBufferThread 和 Thread 都是独立的线程,run 方法扩展了 Thread...
这就是我问是否为线程创建一个对象并访问它的某些方法的原因...是否调用了线程的运行方法?
最佳答案
我不会使用您也将其描述为 Thread
的对象,因为这更有可能造成混淆而不是有用。
Thread
上调用它的唯一方法是 start()
从那时起它独立运行。
这会调用
Thread
对象上的一个方法。这对该线程没有任何作用,甚至不需要运行。return t.setQuote(mmsg.getMessageBody());
您所做的只是设置两个值,仅此而已。涉及一个线程也只是令人困惑的恕我直言。
关于Java 多线程概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349963/