2011-04-21 114 views
1

請,會是怎樣的結果,如果我實現諸如記住我已經實現可運行此調用run方法,而無需啓動一個新的線程

public class MyName implements runnable { 
    Thread t; 
    boolean checkinstance_state = false; 

    /*then in a method somewhere in the class i have something like this*/ 

    public void firstOperation { 
     /*do something and then call setBlah()*/ 
     setBlah(); 
    } 

    public void setBlah(){ 
     if(checkedinstance_state){ 
      t = new Thread(); 
      t. start(); 
      checkedinstance_state = true; 
     } else { 
      t.run(); 
     } 
    } 

    public void run(){ 
     /*another method operation here*/ 
     setBlahBlah(); 
    } 
} 

軸承代碼。情況是,我會不斷地訪問這個類,並且我不想一直創建一個線程對象。所以我想要一個情況,如果一個線程對象已經被創建,run方法應該被調用。這是一個正確的事情,是否會涉及問題,我不能在這個實現中預見?謝謝。

+0

「嘗試」是如何進入的 – 2011-04-21 11:07:58

+0

哎呀抱歉,我正在寫代碼,因爲我張貼。所以我沒有想太多。將改變它。 :) – irobotxxx 2011-04-21 11:10:24

+0

首先會發生的是,您將因違反Java命名約定而被捕。然後你會得到一個編譯錯誤。 – 2011-04-21 13:53:26

回答

2

這不會做你想做的事情。創建一個執行器服務,並定期將可運行的實例傳遞給執行器;你不希望這個班級做自己的線程管理,也不想自己管理這些線程。執行程序服務旨在將您與線程處理隔離開來。

+0

約瑟夫是正確的,你應該只是將一個Runnable發佈到全局處理程序。或者可能是AsyncTask線程。 這不會運行,因爲內部實例化應該會停止發佈Looper未啓動。 – 2011-04-21 11:07:10

+0

文檔:http://developer.android.com/reference/java/util/concurrent/ExecutorService.html – 2011-04-21 11:08:12

+0

該類實際上也擴展了服務。我這樣做了這個問題,所以它可能儘可能通用,因爲有些可能不是Android傾向於的。所以我仍然需要一個ExecutorService?在我的情況下,這兩種方法都是在一個方法結束時阻止操作,它調用第二個方法。我在一個服務中執行一個方法,然後在一個線程中執行第二個方法。 – irobotxxx 2011-04-21 11:21:28

2

您可以調用run()方法,但代碼將在您調用方法的當前線程中運行,而不是像您期望的那樣在線程實例(t)中運行。

0

你應該有,如果條件爲

if(!checkedinstance_state) 

因爲你的代碼的線程對象將不會在所有得到初始化。

因此,當線程對象首次被初始化並啓動時,當有線對象進入runnable狀態時,JVM將自行運行run方法。並且從那時起,只要您致電setBlah(),那麼將在當前線程中顯式調用run方法。

+0

謝謝..我想知道爲什麼它不斷給我一個空指針例外t.run(); – irobotxxx 2011-04-21 11:15:34

相關問題