2016-06-08 32 views
0

我想了解一旦Jboss發現前一個線程忙時,Jboss如何從線程池中創建/分配不同的線程。爲此,我試着寫下一段代碼,我希望讓一個線程進入休眠狀態將會使其繁忙,並且Jboss將會創建一個新的。但它沒有工作。 我希望我的Test0類創建5個線程來執行Test1的運行方法,只要它發現Test1線程忙於做某事。Jboss中的多線程

public class Test1 extends Thread{ 
    public Test1(){ 
    System.out.println("T1 Constructor"); 
} 

@Override 
    public void run() { 

    System.out.println("run from t1 "+ Thread.currentThread().getName()); 
    try { 
    Thread.currentThread().sleep(5000); 
    } catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

} 

} 

而且我將執行時,JBoss會開始在TEST0類我manully創建5個線程如下

@Singleton 
@Startup 
public class Test0 { 
private Test1 t1; 
public Test0(){ 

} 

@PostConstruct 
public void starts(){ 
    for (int i=0;i<5;i++){ 
    t1=new Test1(); 
    t1.start(); 
    try { 
     Thread.sleep(1000); 

    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
    } 
} 

現在TEST0類。我應該如何格式化代碼以讓Jboss從線程池創建線程?

如果我在服務器上運行時調用t1.run()而不是t1.start(),它會起什麼作用嗎?因爲我知道t1.run不會創建一個新的線程,但在服務器的情況下它仍然保持不變。

+0

爲什麼不創建一個Servlet並重復調用它?這應該創建不同的線程。 –

+0

沒有主要的是我想找到一個邏輯n正確的方式,因爲在一些項目中,我看到相同的代碼結構 –

+0

它不'找到以前的線程繁忙'。它發現它有一個新的任務,它需要一個線程,所以它從池中獲取一個。這是知道哪些線程是空閒的池。您不能自己使用JBoss線程池AFAIK。 – EJP

回答

0

如果我正確理解您的問題,您想知道何時從Jboss線程池中使用新線程。你如何檢查JBoss是否產生了新線程?你在看Jboss日誌嗎?只有在現有線程已經忙於執行預先請求的情況下向Jboss服務器發送新客戶端請求時,Jboss纔會啓動新線程。向Jboss服務器發出多個客戶端請求,以查看在給定時間點處理您的代碼的多個線程。

+0

所以在我的代碼t1 = new Test1();不會創建新的主題?我如何將多個請求傳遞給Jboss,我是Jboss的新手,並且在線程方面也沒有多少經驗。 –

+0

這將創建新線程,但它是由您的代碼而不是由Jboss創建的線程。所以創建這樣的線程不會影響Jboss。爲了影響Jboss線程池,你必須同時發送多個http請求。 – user3395036