android状态机是线程么,Java中的线程状态机 - java
有沒有一種方法可以將線程保留在狀態中等待更改?
我的意思是,等一下事情發生了(更改var,調用方法等)。
也許它需要使用事件監聽器或同步的對象/方法。
這樣的狀態機通常的方法
statemachine example
它使用一個do {..} while(true)循環,該循環可以用于單線程(無GUI)應用程序,但不能與線程一起使用。
(至少您要為每個線程狀態機使用一個內核)
因此,以一種簡單(難看)的方式避免處理器消耗任務
是“定期檢查器”,我的意思是添加睡眠
另一個想法是定義一個同步對象,并使用等待而不是線程睡眠
例:
do{
Switch(state)
{
case STATE_A:
//..A things
break;
case STATE_B:
//..B things
break;
...
case STATE_Z:
//..Z things
break;
}
// Here! => wait()? Thread.sleep(TIME_CONST)? //Hold and yield
}while(powerOn);
缺點是使用同步會增加復雜性,否則在TIME_CONST內發生的任何事情都是不可見的
我想知道其他想法,
謝謝 !
參考方案
是的,您將使用wait / notify。那就是它的目的。
也許您的狀態機不需要自己的線程。當發生有趣的事情時,其他線程可以在狀態機上調用update方法。
JAVA:字節碼和二進制有什么區別? - java
java字節代碼(已編譯的語言,也稱為目標代碼)與機器代碼(當前計算機的本機代碼)之間有什么區別?我讀過一些書,他們將字節碼稱為二進制指令,但我不知道為什么。 參考方案 字節碼是獨立于平臺的,在Windows中運行的編譯器編譯的字節碼仍將在linux / unix / mac中運行。機器代碼是特定于平臺的,如果在Windows x86中編譯,則它將僅在Win…java:繼承 - java
有哪些替代繼承的方法? java大神給出的解決方案 有效的Java:偏重于繼承而不是繼承。 (這實際上也來自“四人幫”)。他提出的理由是,如果擴展類未明確設計為繼承,則繼承會引起很多不正常的副作用。例如,對super.someMethod()的任何調用都可以引導您通過未知代碼的意外路徑。取而代之的是,持有對本來應該擴展的類的引用,然后委托給它。這是與Eric…Java:BigInteger,如何通過OutputStream編寫它 - java
我想將BigInteger寫入文件。做這個的最好方式是什么。當然,我想從輸入流中讀取(使用程序,而不是人工)。我必須使用ObjectOutputStream還是有更好的方法?目的是使用盡可能少的字節。謝謝馬丁 參考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是將對象序列化為八位字節序列的一種通用方法。但…Java-如何將此字符串轉換為日期? - java
我從服務器收到此消息,我不明白T和Z的含義,2012-08-24T09:59:59Z將此字符串轉換為Date對象的正確SimpleDateFormat模式是什么? java大神給出的解決方案 這是ISO 8601標準。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…Java:從類中查找項目名稱 - java
僅通過類的實例,如何使用Java反射或類似方法查找項目名稱?如果不是,項目名稱(我真正想要的是)可以找到程序包名稱嗎? 參考方案 項目只是IDE使用的簡單組織工具,因此項目名稱不是類或JVM中包含的信息。要獲取軟件包,請使用Class#getPackage()。然后,可以調用Package#getName()將包作為您在代碼的包聲明中看到的String來獲取…
總結
以上是生活随笔為你收集整理的android状态机是线程么,Java中的线程状态机 - java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 15的运存会有多少苹果历代
- 下一篇: android显示绘图动画,Androi