2015-09-08 82 views
0

在我的Android應用程序中有一個包含可運行內部類的活動。 從此活動創建/啓動運行內部類的新線程。 該線程執行這個循環:控制Android Java線程

while (run) { 
    ... 
} 

布爾「運行」的狀態應該從兩個線程來改變。 這就是爲什麼我把它改成了活動課是這樣的:

private static volatile boolean run; 

我想知道這是否是控制線程的正確途徑。 兩個線程在內存中使用相同的變量嗎? 由於檢查和設置布爾值都不是cpu的原子操作,有可能,一個線程檢查「運行」而另一個線程正在改變其狀態?

+0

你想做什麼?它能以其他(也許更好)的方式解決嗎? – Kenneth

+0

檢查*或*設置'boolean'是原子。檢查*和*設置'boolean'不是。 –

回答

0

這兩個線程是否在內存中使用相同的變量?

是。您沒有向我們展示太多代碼,但由於該變量爲static,因此您已向我們展示了足夠的數據。一個static變量只存在於一個地方。任何可以在程序中任何地方看到的代碼都會看到相同的變量。

我想知道這是否是控制線程的正確方法。

這是一個很好的方式信令一個線程。

您可能想要採取不同的唯一原因是線程無法經常檢查run變量。特別是,如果線程等待的任何東西。

在這種情況下,你可能想看看thread.interrupt()中斷,而這是在等待着什麼(在大多數情況下)任何線程將導致在等待拋出InterruptedException.那得到你的線程有機會來檢查是否該方法不是它仍然應該運行。

1

如果您放入內部Runnable類中的任務完成,則線程將自行停止。因此,使Runnable保持活動狀態將使線程保持活動狀態,即使用while循環。並易於控制run變化的變化。