簡體   English   中英

Java中的線程內的線程?

[英]Threads within threads in Java?

我目前正在考慮如何在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 

如果沒有,有人可以提供參考的理論解決方案嗎?

是的,您可以根據需要啟動任意數量的線程,但這可能不是最好的方法。 使用非阻塞API會更好,這樣你就可以開始執行一些外部調用,並且調用線程可以立即開始執行其他操作而無需等待socket / database調用返回。 然后,當套接字/數據庫調用返回時,將觸發回調以完成該處理。

非阻塞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

要回答這個問題,是的線程可以啟動其他線程。

層次結構重要嗎?

使用帶有緩存線程池的ExecutorService可能會更好。 這樣你就可以匯集線程而不是創建批量(這很昂貴)。 ExecutorServices還提供了其他很酷的功能,使用Callables / Runnables可能比使用自己的線程更容易測試。

是的,一個線程可以啟動另一個線程,該線程可以啟動線程,然后開啟......

在線程的run()方法中 - 您可以創建並啟動其他線程。

例如,您可以創建線程並將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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM