Java 多執行緒可實現並發編程,提升效能和回應能力。建立執行緒可透過繼承 Thread 類別或實作 Runnable 介面。線程生命週期包括 NEW、RUNNABLE 等狀態。同步機制如互斥鎖和 synchronized 關鍵字可避免資料競爭。實戰案例展示了多執行緒下載檔案的場景,透過建立執行緒池和下載任務,實現並行下載。
Java 多執行緒詳解
#引言
多執行緒是Java 中實現並發程式設計的基本機制,它允許應用程式同時執行多個任務,以提高效能和回應能力。本文將詳細介紹 Java 多執行緒的概念、實作方式和實戰案例。
執行緒基礎
執行緒是一個輕量級進程,它與其他執行緒共享記憶體和資源。在 Java 中,執行緒使用 Thread
類別表示,它提供了啟動、暫停和停止執行緒的方法。
class MyThread extends Thread { @Override public void run() { // 线程执行的任务 } }
建立執行緒
可以用兩種方式建立執行緒:
Thread
類:可以建立一個擴充Thread
類別的新類,並重寫run()
方法來指定執行緒執行的任務。 Runnable
介面:可以建立實作Runnable
介面的新類,它只是一個有run()
方法的接口。然後,可以將該類別作為參數傳遞給 Thread
建構函數。 // 继承 Thread 类 class MyThread extends Thread { public void run() { // 线程执行的任务 } } // 实现 Runnable 接口 class MyRunnable implements Runnable { @Override public void run() { // 线程执行的任务 } }
執行緒生命週期
一個執行緒可以處於下列狀態之一:
執行緒同步
當多個執行緒存取共享資源時,必須同步它們以避免資料競爭。 Java 提供了以下同步機制:
synchronized
關鍵字新增到方法或程式碼區塊中,以確保只有持有物件的鎖的執行緒才能執行該程式碼。 實戰案例:多執行緒下載檔案
以下程式碼示範如何使用多執行緒從多個 URL 下載檔案:
import java.net.URL; import java.net.URLConnection; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class MultiThreadedDownloader { public static void main(String[] args) { String[] urls = { "https://example.com/file1.zip", "https://example.com/file2.zip", "https://example.com/file3.zip" }; // 创建一个线程池 ExecutorService executor = Executors.newFixedThreadPool(3); // 为每个 URL 创建一个下载任务 for (String url : urls) { executor.submit(new DownloadTask(url)); } // 关闭线程池 executor.shutdown(); } static class DownloadTask implements Runnable { private String url; public DownloadTask(String url) { this.url = url; } @Override public void run() { try { // 从 URL 建立连接 URLConnection connection = new URL(url).openConnection(); // 设置下载位置 String fileName = url.substring(url.lastIndexOf('/') + 1); File file = new File("downloads/" + fileName); // 创建输出流 FileOutputStream outputStream = new FileOutputStream(file); // 读取输入流并写入输出流 int read; while ((read = connection.getInputStream().read()) != -1) { outputStream.write(read); } // 关闭流 outputStream.close(); connection.getInputStream().close(); System.out.println("下载文件 " + fileName + " 完成"); } catch (IOException e) { e.printStackTrace(); } } } }
以上是Java多執行緒實作詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!