首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 多執行緒核心技術綜述:線程篇

     編輯:Java 程式設計入門

核心方法與關鍵字

多執行緒程式常用方法:run()、start()、wait()、notify()、notifyAll()、sleep()、yield()、join(),關鍵字 synchronized。

run() 與 start() 的區別

  • run():執行緒執行體,放入並行邏輯,必須為 public void run()。
  • start():啟動執行緒,由 JVM 自動呼叫 run()。直接呼叫 run() 不會啟動新執行緒,僅在當前執行緒執行。

synchronized 關鍵字與共享資料

synchronized 保護共享資料。每個物件有一把鎖;執行緒進入同步區塊需獲取鎖,離開時釋放。

關鍵區別:同一物件 vs 不同物件

// 情況 1:不同物件,synchronized 無效
Runnable r1 = new ThreadTest();
Runnable r2 = new ThreadTest();
Thread t1 = new Thread(r1), t2 = new Thread(r2); // 兩把鎖,並發執行

// 情況 2:同一物件,synchronized 生效
Runnable r = new ThreadTest();
Thread t1 = new Thread(r), t2 = new Thread(r); // 共用一把鎖,串行執行

縮小同步範圍

使用 synchronized(this) { ... } 僅同步必要程式碼區塊,提升並發度。

sleep() 方法

  • 讓當前執行緒休眠指定毫秒數,釋放 CPU,**不釋放鎖**。
  • 需捕捉 InterruptedException。
  • 可配合優先級:高優先級執行緒 sleep 時,低優先級可獲得執行機會。

wait()/notify()/notifyAll()

  • 屬於 Object 方法,**必須在同步區塊內呼叫**。
  • wait():釋放鎖,進入等待集合。
  • notify():喚醒一個等待執行緒;notifyAll():喚醒全部。
  • 喚醒後需重新競爭鎖才能繼續執行。

yield() 與 join()

  • yield():暗示排程器讓出 CPU,不保證切換,不釋放鎖。
  • join():等待目標執行緒結束,常用於主執行緒等待子執行緒完成。

最佳實踐總結

  1. 明確識別共享資料,僅同步必要區塊。
  2. 優先使用 java.util.concurrent 套件(Lock、Condition、Concurrent 集合)替代低階同步。
  3. 避免在同步區塊呼叫耗時操作或 sleep()。
  4. 正確處理 InterruptedException,保留中斷狀態。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved