[英]Anonymous class extending thread in Java
這是一個Java語法問題,但僅出於某些背景。
使用android,我創建了一個很小的應用程序,運行非常緩慢,並且經常崩潰,因為單擊按鈕時,onClick()方法更改了各種按鈕的按鈕圖像。 這確實很笨拙而且很慢,我在網上搜索后發現問題很普遍,並且在onClick()方法中更改許多圖像時,最好將它們放在單獨的線程中。 一位善良的人為此提供了代碼。
new Thread(new Runnable() {
public void run() {
quest.post(new Runnable() {
public void run() {
correct = nextQ();
}
});
}
}).start();
nextQ()方法和“ quest” TextView是我的。 這與我的問題做什么無關緊要,但是nextQ進行數據庫搜索並更新圖像,並且在線程外運行它確實很慢且很崩潰。 現在,我將此代碼復制並粘貼到我的代碼中,並且運行良好。 一個快樂的結局。 但是我不習慣使用我不理解的代碼。 而且我不太了解Java。 因此,我盡了最大的努力研究匿名內部類,但是我仍然對代碼感到困惑。
因此,匿名類擴展了線程,並且它的參數使用了一個匿名類,實現了可運行的,其中放置了代碼的“肉”。問題:1)為什么要這樣做? 我可以理解使用線程OR可運行,但是為什么要一起使用呢? 2)如何運作? 我回到了線程和可運行的基礎知識,但是我看不到您如何以這種方式一起使用它們。
因此,匿名類擴展了線程,
不,不是的。 它實現了Runnable。
1)我為什么要這樣做? 我可以理解使用線程OR可運行,但是為什么要一起使用呢?
如果使用Runnable,則仍然需要以某種方式運行它,一種方法是創建一個新線程並將其提供給Runnable(在此完成)。
2)如何運作?
new Thread(runnable)
創建一個新線程,然后您可以啟動()。 它將在Runnable的run()方法中執行代碼。
Runnable
包含應執行的代碼(一種替代方法是Callable
)。
Thread
控制代碼的執行方式和時間(替代方法是ExecutorService
或直接調用run()以便在當前線程上同步執行)
通常,(為了將這兩個功能區分開),您不想擴展Thread,而只想實現Runnable或Callable。
可以擴展Thread並直接實現run(而不是讓它委托給Runnable),但這有點老套了。 如果他們今天要重新設計Java API,則Thread可能不再實現Runnable。 線程與其說是可運行的,不如說是奔跑者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.