Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用螺纹安全的螺纹内螺纹_Java_Multithreading_Thread Safety_Pthreads - Fatal编程技术网

Java 如何使用螺纹安全的螺纹内螺纹

Java 如何使用螺纹安全的螺纹内螺纹,java,multithreading,thread-safety,pthreads,Java,Multithreading,Thread Safety,Pthreads,有没有一种方法可以在线程内使用线程?如果是,如何以线程安全的方式使用它 我在线程内部尝试了这个线程,但有时我得到了错误的结果。请帮助我如何使用线程安全性找出线程内部的线程 for(int i=0; i<numExpression; i++) { final int _i = i; final SDISQueryInfo _qryInfo = sdisQueryInfo; final SDISQueryComponent _qryComponent = qryComp

有没有一种方法可以在线程内使用线程?如果是,如何以线程安全的方式使用它

我在线程内部尝试了这个线程,但有时我得到了错误的结果。请帮助我如何使用线程安全性找出线程内部的线程

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();
}

for(int i=0;i原则上从其他线程启动线程没有问题。线程之间没有真正的区别(可以说,没有父线程或子线程)

我不知道你说的“这个函数里面有一个线程…”是什么意思

我假设您的意思是它将启动另一个线程。这一点也不重要,当然,除非内部线程与其他线程共享信息。您必须查阅
SDISQueryComponent的文档。准备
以了解情况是否如此

我的期望是SDISQueryComponent可以使用线程,原因很简单,它的设计显然考虑了线程(或者它不会启动线程)

我在这里想到的最重要的一点是,您可能会遇到这样的情况:创建更多线程会产生争用(由于上下文切换开销,可能还有锁定),从而使事情变得缓慢


在这种情况下,通常的解决方案包括一个线程池和一个工作队列。但是,我不知道SDISQueryComponent是否支持使用线程池,所以这可能不在您的掌握之中。

@sehe听起来像一个SEO问题:))线程中的线程。。。。《盗梦空间》?我想你误解了我所说的。。。我提到的函数也由线程组成。。但它正在发挥作用,但并不一致。所以我不知道为什么会发生这种情况。谢谢你宝贵的时间。在这里,我上面提到的线程代码运行良好。。如果我在该函数中添加线程,结果有时是正确的,有时则不显示正确的结果(不一致)。。让我再添加函数代码。。,