【问题标题】:Threads within threads in Java?Java中线程内的线程?
【发布时间】:2011-11-05 16:23:45
【问题描述】:

我目前正在考虑如何在 Java 中设计一个需要做一些繁重的网络处理和数据库存储的多线程系统。该程序将首先启动三个基本线程。沿着这些基本线程,我想不是从主程序而是从两个线程启动其他线程。一个线程是否有可能启动另一个线程,从而导致某种层次结构,例如:

> Parent ->t0 thread1 -> t1 tread1.1  
>        ->t0 thread2
>        ->t0 thread3 -> t2 thread3.1

t0= inital time
t1,t2 = time at a point in the running thread
t1 != t2 

如果没有,有人可以提供带有参考的理论解决方案吗?

【问题讨论】:

  • 呃,是的。为什么你不能?也许如果你尝试过......
  • 我不确定你在问什么。您可以从任何 java 代码创建一个新线程,而不管它在哪个线程中运行。线程是否需要保留对它们产生的其他线程的引用?您描述的层次结构的目的是什么?

标签: java multithreading threadpool


【解决方案1】:

是的,您可以启动任意数量的线程,但这可能不是最好的方法。最好使用非阻塞 API,这样您就可以开始执行一些外部调用,并且调用线程可以立即开始执行其他操作,而无需等待套接字/数据库调用返回。然后,当套接字/数据库调用返回时,会触发回调以完成该处理。

非阻塞 I/O 可以提供高得多的 CPU 利用率,因为您只是触发调用和注册回调,而不必尝试平衡“正确”数量的并发线程,这些线程大多只是在休眠。

http://www.owlmountain.com/tutorials/NonBlockingIo.htm

http://www.tensegrity.hellblazer.com/2008/03/non-blocking-jdbc-non-blocking-servlet-apis-and-other-high-mysteries.html

【讨论】:

  • 你碰巧知道我怎样才能让我的线程继续运行而不管异常。异常似乎停止了线程(我正在接受)。我试图通过在线程内创建一个线程来解决它,但是线程 B 中的异常(从线程 A 内部创建)停止了两个线程。两者的布尔标志在停止后仍然为真。
【解决方案2】:

要回答这个问题,是的,线程可以启动其他线程。

层次结构重要吗?

您最好使用带有缓存线程池的ExecutorService。这样你就可以池线程而不是创建很多(这很昂贵)。 ExecutorServices 还提供了其他很酷的东西,与它们一起使用 Callables / Runnables 可能比您自己使用线程更容易测试。

【讨论】:

    【解决方案3】:

    是的,一个线程可以启动另一个线程,并且该线程可以启动线程,然后继续......

    在一个线程的run() 方法中——你可以创建和启动其他线程。

    【讨论】:

      【解决方案4】:

      有可能 例如,您可以像这样创建线程并将 id 放入数组中

      UnThread[] tab=   new  UnThread[10] ;
      
      for ( int i=0;i<20;i++)
      
      tab[i] = new UnThread();
      

      之后你可以给 subMainThread 数组选项卡

      例子

        while( tab[1].isAlive() ) {
        //do somthing..
        System.out.println("Ligne affichée par le main");
        try {
          // et faire une pause
          tab[1].sleep(800);
        }
        catch (InterruptedException ex) {}
       }
      

      这里是线程的简单使用: http://kamel.berrayah.com/wordpress/2013/07/java-threads/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多