Java多線程和并發是Java語言開發中非常重要的一個部分。Java中的多線程使得程序可以同時執行多個任務,從而提高了程序的性能和效率。
Java的多線程基于線程對象的概念,每個線程對象都有一個獨立的執行路徑。Java中的線程對象可以通過繼承Thread類或實現Runnable接口來創建。一般來說,實現Runnable接口是更好的方法,因為Java不支持多繼承,使用Runnable接口可以避免這個問題。
public class MyThread implements Runnable { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { for(int i=0; i<10; i++) { System.out.println(name + " : " + i); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class Main { public static void main(String[] args) { Thread t1 = new Thread(new MyThread("Thread 1")); Thread t2 = new Thread(new MyThread("Thread 2")); t1.start(); t2.start(); } }
上述代碼是一個使用Runnable接口創建的多線程示例,其中MyThread類是Runnable接口的實現,用于定義線程要執行的代碼。在Main類中,我們創建了兩個MyThread對象,并將它們分別作為參數傳遞給Thread類的構造方法中,然后調用start()方法來啟動線程執行。
Java中的并發主要是通過同步和鎖機制來實現的。在多線程環境下,如果多個線程同時操作同一個共享變量或資源,就會出現競爭條件。為了避免這種情況,Java提供了synchronized關鍵字和Lock機制來實現線程的同步。
public class Counter { private int count = 0; public synchronized void increment() { count++; } public int getCount() { return count; } } public class Main { public static void main(String[] args) { Counter counter = new Counter(); Thread t1 = new Thread(() ->{ for(int i=0; i<1000; i++) { counter.increment(); } }); Thread t2 = new Thread(() ->{ for(int i=0; i<1000; i++) { counter.increment(); } }); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Count : " + counter.getCount()); } }
上述代碼是一個使用synchronized關鍵字實現的線程同步示例。其中Counter類表示一個計數器對象,increment()方法是計數器加1的方法,在方法上加上synchronized關鍵字可以保證同一時間只有一個線程在執行該方法。Main類中創建了兩個線程分別執行increment()方法,最終輸出計數器的值。
Java多線程和并發是Java開發中非常重要的概念,需要理解和掌握。