Java:使用匿名內部類別在方法內部定義並啟動線程
下面的程式碼展示了在一個方法中,透過匿名內部類別定義一個Thread,並Override它的run()方法,之後直接啟動該執行緒。
這樣的程式碼可用於在一個類別內部透過另一個執行緒來執行一個支線任務,一般這樣的任務並不是該類別的主要設計內容。
package com.zj.concurrency; public class StartFromMethod { private Thread t; private int number; private int count = 1; public StartFromMethod(int number) { this.number = number; } public void runTask() { if (t == null) { t = new Thread() { public void run() { while (true) { System.out.println("Thread-" + number + " run " + count + " time(s)"); if (++count == 3) return; } } }; t.start(); } } public static void main(String[] args) { for (int i = 0; i < 5; i++) new StartFromMethod(i).runTask(); } }
結果:
Thread-0 run 1 time(s)
Thread-0 run 2 time(s)
Thread-1 run 1 time(s)
Th.1
Thread-2 run 1 time(s)Thread-2 run 2 time(s)Thread-3 run 1 time(s)Thread-3 run 2 time(s)Thread-3 run 2 time(s)
time(s)Thread-4 run 2 time(s)
熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

匿名內部類別可導致記憶體洩漏,問題在於它們持有外部類別的引用,從而阻止外部類別被垃圾回收。解決方法包括:1.使用弱引用,當外部類別不再被強引用持有時,垃圾回收器會立即回收弱引用物件;2.使用軟引用,垃圾回收器會在進行垃圾回收時需要記憶體時才回收軟引用物件。在實戰中,例如Android應用程式中,可以透過使用弱引用來解決因匿名內部類別引起的記憶體洩漏問題,從而在不需要監聽器時回收匿名內部類別。

匿名內部類別是Java中沒有明確名稱、透過new表達式創建的特殊內部類,主要用於實作特定介面或擴展抽象類,並在創建後立即使用。常見的匿名內部類別設計模式包括:適配器模式:將一個介面轉換為另一個介面。策略模式:定義和替換演算法。觀察者模式:註冊觀察者並處理事件。它在實際應用中非常有用,例如按字串長度排序TreeSet、建立匿名執行緒等。

匿名內部類別在Java中作為方便建立子類別、簡化程式碼和處理事件(例如按鈕點擊)的特殊內部類別。實戰案例包括:事件處理:使用匿名內部類別為按鈕新增點選事件監聽器。資料轉換:使用Collections.sort方法和匿名內部類別作為比較器對集合進行排序。

匿名內部類別的效能問題在於每次使用都會重新創建,可透過以下策略最佳化:1.將匿名內部類別儲存在局部變數中;2.使用非靜態內部類別;3.使用lambda表達式。實戰測試顯示lambda表達式最佳化效果最佳。

匿名內部類別的生命週期由其作用域決定:方法局部內部類別:僅在創建它的方法範圍內有效。建構器內部類別:與外部類別實例綁定,當外部類別實例釋放時釋放。靜態內部類別:與外部類別同時載入卸載。

匿名內部類別可簡化多執行緒程式碼的創建,無需命名,支援即時定義和使用執行緒類別。主要優勢在於簡化程式碼,而限制是無法擴展。在需要快速建立一兩個執行緒時使用,保持程式碼簡短,如果需要更複雜的邏輯,應建立單獨的類別檔案。
