有没有办法我可以在Thread内使用Thread?如果是这样,如何在线程安全方式中使用
我在线程中尝试了这个线程,有时我得到了错误的结果。请帮我看看如何使用线程安全 找出线程中的 线程
此处 _qryCompoents.prepare(_sdisQueryInfo)是我正在调用的函数。这个函数里面有线程。 对不起这个问题我道歉..我无法删除这个问题。for(int i=0; i<numExpression; i++)
{
final int _i = i;
final SDISQueryInfo _qryInfo = sdisQueryInfo;
final SDISQueryComponent _qryComponent = qryCompoents;
TCreate[i] = new Thread(new Runnable()
{
public void run()
{
_qryComponent.prepare(_qryInfo);
}
});
TCreate[i].setName(_qryInfo.getQueryTerm(_i));
TCreate[i].start();
}
for(Thread t : TCreate)
{
t.join();
}
答案 0 :(得分:2)
原则上,从其他线程启动线程没有问题。线程之间没有真正的区别(没有父线程或子线程,可以这么说)。
我不确定是什么意思“这个函数里面有一个线程......”。
我假设你的意思是它会启动另一个线程。除非内部线程与其他线程共享信息,否则这绝不会产生重大影响。您必须查阅SDISQueryComponent.prepare
的文档,以了解是否属于这种情况。
我的期望是SDISQueryComponent可以使用线程,原因很简单,显然它设计时考虑了线程(或者它不会启动线程)。
我在这里想到的最重要的事情是,你可能会遇到这样的问题:创建更多的线程会产生争用(由于上下文切换开销和锁定),使得事情变得缓慢。
在这种情况下,通常的解决方案涉及线程池和工作队列。但是,我不知道SDISQueryComponent是否支持使用线程池,因此可能不在你手中