JAVA核心並發程式設計模型實務指南
在當今軟體開發領域中,多核心處理器和分散式系統已經成為主流。為了充分利用硬體資源,我們需要編寫並發程式來實現平行處理和提高效能。 JAVA作為一種主流的程式語言,提供了豐富的同時程式設計模式和工具。本篇文章將透過一些具體的程式碼範例,帶領大家深入了解JAVA核心的並發程式設計模型,並且學習如何使用這些模型來實踐並發程式設計。
public class MyThread extends Thread { @Override public void run() { System.out.println("Hello, this is my thread!"); } public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }
在這個範例中,我們建立了一個繼承自Thread的自訂執行緒類別MyThread,並且重寫了run方法,在run方法中輸出一段簡單的訊息。在main方法中,我們建立了MyThread的實例並透過start方法來啟動執行緒。
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("Hello, this is my runnable!"); } public static void main(String[] args) { Thread myThread = new Thread(new MyRunnable()); myThread.start(); } }
在這個範例中,我們建立了一個實作了Runnable介面的自訂類別MyRunnable,並且重寫了run方法。在main方法中,我們建立了一個Thread對象,將MyRunnable的實例作為參數傳入,並透過start方法來啟動執行緒。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(3); for (int i = 0; i < 5; i++) { Runnable worker = new WorkerThread("" + i); executor.execute(worker); } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finished all threads"); } } class WorkerThread implements Runnable { private String message; public WorkerThread(String s) { this.message = s; } public void run() { System.out.println(Thread.currentThread().getName() + " (Start) message = " + message); processMessage(); System.out.println(Thread.currentThread().getName() + " (End)"); } private void processMessage() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
在這個範例中,我們使用了Executors工具類別來建立一個固定大小為3的執行緒池。然後,我們建立了5個WorkerThread的實例,並提交給執行緒池,執行緒池會負責管理這些執行緒的執行。
public class Counter { private int count = 0; public synchronized void increment() { count++; } public synchronized void decrement() { count--; } public synchronized int getCount() { return count; } }
在這個範例中,我們建立了一個Counter類,其中的increment、decrement和getCount方法都使用了synchronized關鍵字來實現同步。這樣可以確保多個執行緒對這些方法的呼叫是安全的。
另外,JAVA的並發包中也提供了多種鎖的實現,例如ReentrantLock和ReadWriteLock。以下是使用ReentrantLock的範例:
import java.util.concurrent.locks.ReentrantLock; public class ReentrantLockExample { private final ReentrantLock lock = new ReentrantLock(); public void performTask() { lock.lock(); try { // 执行需要同步的代码块 } finally { lock.unlock(); } } }
在這個範例中,我們建立了一個ReentrantLock的實例,並且使用lock和unlock來實現對臨界區的加鎖和解鎖。這種方式比起synchronized關鍵字更靈活,可以手動控制鎖的取得與釋放。
import java.util.concurrent.ConcurrentHashMap; public class ConcurrentMapExample { private ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(); public void addKeyValuePair(String key, String value) { map.put(key, value); } public String getValueByKey(String key) { return map.get(key); } }
在這個範例中,我們建立了一個ConcurrentHashMap實例,使用put和get方法來安全地操作Map中的數據,而不需要額外的同步操作。
透過上面的範例,我們深入了解了JAVA核心的並發程式設計模型,包括執行緒基礎、執行緒池、鎖定和同步、以及並發集合。在實際的專案中,合理地使用這些並發程式設計模型可以提高程式的效能和穩定性。希望本文可以幫助讀者更好地掌握JAVA的並發程式設計知識,並且在實踐中編寫高效的並發程式。
以上是JAVA核心並發程式設計模型實踐指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!