compare java wait/notify synchronization with lock or condition in java.util.concurrent (juc)

為什麼 Java 的 wait/notify 逐漸被新 API 取代?

在 Java 的演進過程中,雖然 Object.wait()Object.notify() 仍存在於核心庫中,但在現代開發場景,java.util.concurrent (JUC) 提供的 LockCondition 已成為主流。以下是三大核心取代原因:

1. 靈活性與精確控制 (Multiple Conditions)

這是最關鍵的進步。舊有機制中,每個物件僅有一個「等待集」。

  • 舊機制: 生產者與消費者共用同一個等待隊列。呼叫 notify() 無法指定喚醒誰,常被迫改用 notifyAll(),導致驚群效應 (Thundering Herd)
  • 新機制 (Condition): 一個鎖可建立多個條件物件(如 notFull, notEmpty)。生產者只需喚醒消費者,反之亦然,效能大幅提升。

2. 安全性與健壯性 (Robustness)

新 API 解決了許多語法上的僵化問題:

特性 Object.wait/notify JUC Condition
鎖的依賴 強烈耦合 synchronized 配合 ReentrantLock,更靈活
中斷響應 僅支援基本中斷 支援不可中斷的等待 (awaitUninterruptibly)
超時控制 毫秒級 精確至奈米級 (nanoseconds)

3. 功能擴展性 (Advanced Features)

ReentrantLock 提供了舊機制無法達成的進階功能:

公平性 (Fairness): 新 API 支援公平鎖設定,確保等待最久的執行緒優先獲取資源。
非阻塞嘗試: 透過 tryLock(),執行緒可以在拿不到鎖時立即返回,避免死等。
總結:除非是極簡的同步邏輯,否則在現代 Java 開發中,ReentrantLock + Condition 是更安全、高效的選擇。

choose which S3 object ownership?

S3 Object Ownership 兩種模式差異

Amazon S3 服務全名為 簡單儲存服務 (Simple Storage Service),可支援存取放置於AWS公有雲的檔案,其服務類似 Google Drive 或 Microsoft OneDrive 的網碟功能。S3 儲存容器稱為水桶,儲存的檔案稱為物件。

建立S3水桶時,須決定上傳到水桶的物件,其擁有者將自動歸屬於誰,稱為物件擁有權(Object Ownership)設定。只有物件的擁有者才能設定物件的存取權。這裡簡單介紹兩種設定模式的差異:

🔒 模式一:ACL disabled(recommended)

所有物件都由 Bucket 擁有者持有,不論是誰上傳。ACL 完全被停用,不能再用 ACL 來授權。存取控制只能透過 IAM Policy 或 Bucket Policy 來設定。

優點:集中管理,避免跨帳號物件所有權混亂。

最佳實務:AWS 建議使用這種模式,因為更安全、更容易維護。

🔑 模式二:ACLs enabled

物件可能由上傳者帳號持有,而不是 Bucket 擁有者。存取控制可以透過 ACL(物件或 Bucket 層級)來設定。Bucket Policy 仍然可以使用,但 ACL 會一起參與判斷。

用途:適合跨帳號上傳的特殊情境,例如合作夥伴需要保有自己上傳檔案的所有權。

缺點:管理較複雜,容易造成權限混亂。

⚡ 簡單比較
模式	     物件擁有者	                存取控制方式	      AWS 建議
ACL Disabled Bucket 擁有者	        Policy(IAM / Bucket)✅ 建議
ACL Enabled  上傳者帳號可能成為物件擁有者  ACL + Policy	      僅限特殊需求

✍️ 結語

如果你的環境需要簡單、集中、安全的存取管理,選擇 ACL Disabled(Bucket owner enforced) 是最佳做法。 只有在跨帳號物件所有權的特殊需求下,才需要考慮 ACL Enabled

註: S3 權限管理機制比較:ACL vs. 水桶政策

功能特性 S3 ACL (存取控制清單),舊版 水桶政策 (Bucket Policy),新版
物件所有權 預設由「上傳者」擁有物件,即使上傳者不是水桶擁有者。 由「水桶擁有者」自動擁有水桶內的所有物件。
設定格式 XML 格式。 JSON 格式。
控制粒度 可針對「單一物件」進行微調。 針對整個水桶或特定「前綴 (Prefix/資料夾)」進行管理。
權限複雜度 僅限基本權限(讀取、寫入、完全控制),不支援「拒絕 (Deny)」。 支援複雜條件(IP 限制、MFA、特定時間、明確拒絕等)。
稽核便利性 低。必須逐一檢查每個物件的 ACL 才能得知誰有存取權。 高。只需查看一個 JSON 文件即可瞭解全域權限。
AWS 建議實務 不建議使用(除了特定日誌寫入需求)。 強烈建議使用(最佳實務)。

how to connect codex app to remote ollama backend through caddy relay

如何讓 Codex App 連接公司架設的 LLM 從 Caddy 閘道安裝、遠端 Ollama API 金鑰,到 Codex 的 config.toml 組態設定,一次整理成可直接照做的流程。 前言 OpenAI 提供免費下載...

總網頁瀏覽量