CodeGym University
學習
課程
任務
問卷及小測驗
遊戲
幫助
學習提醒時程表
社群
使用者
論壇
聊天
文章
成功故事
活動
評論
訂閱
亮色主題
課堂
評論
關於我們
開始
開始學習
現在就開始學習
探索地圖
課堂
所有探索
所有等級
“wait-notify-notifyAll”策略
Module 2: Java Nkyem
等級 12,
課堂 7
“嗨,阿米戈!” “我想和你深入探討 wait-notify。wait-notify 方法為線程交互提供了一種方便的機制。它們還可以用於構建複雜的線程交互高級機制。” “我將從一個小例子開始。假設我們有一個服務器程序,必須執行用戶通過網站創建的各種任務。用戶可以在不同時間添加各種任務。任務是資源密集型的,但我們服務器的 8 -核心處理器可以應付。我們應該如何在服務器上執行任務?” “首先,我們將創建一組工作線程,與處理器內核的數量一樣多。每個線程都能夠在自己的內核上運行:線程
一些細微差別
Module 2: Java Nkyem
等級 12,
課堂 8
“嗨,阿米戈!” “還有更多細節。我們稱之為實用建議。” “假設你有一個等待某事並進入睡眠狀態直到滿足條件的方法。” 如果集合為空,那麼我們等待 public synchronized Runnable getJob()
有關同步和多線程的其他詳細信息
Module 2: Java Nkyem
等級 12,
課堂 9
“嗨,阿米戈!” “有一個很大的話題——Java 內存模型。基本上,您還不必了解它,但了解它會很有幫助。” “為了消除所有潛在的問題,Java 改變了它的內存管理機制。現在內存不再簡單地分為線程的本地緩存和全局內存——這種機制甚至更好。” “而且更複雜!” “是的,更好,更複雜。就像飛機。坐飛機比走路好,但更複雜。我會盡量簡單地解釋新情況。” “這就是他們想出的。一種用於同步本地線程內存的機制,稱為‘happens-before’,被添加到代碼中。發明了幾個規則/條件。當滿足
來自教授的有用鏈接 — 16
Module 2: Java Nkyem
等級 12,
課堂 10
“你好,阿米戈!告訴我你的進步。你這週學了什麼?” “Ellie、Rishi、Bilaabo 博士和我談論了多線程。我學到了很多東西!” “我親愛的朋友,我想我有一些東西可以擴展你的理解。更多的理論對你有好處。坐下來。我有話要告訴你。 Java 中的多線程:它是什麼,它的好處和常見的陷阱 您現在知道編程有一種方法可以同時(並行)執行多個操作,而不是嚴格按順序執行。這使得解決許多任務變得更加容易。但這並非一帆風順。多線程有一些陷阱,不僅可以讓初學者上鉤,也可以讓有經驗的程序員上
線程組
Module 2: Java Nkyem
等級 13,
課堂 0
“嗨,阿米戈!” “我們將開始對線程進行更徹底的探索。” "引入線程組的概念是為了防止一個線程重複停止和打斷其他線程。一個線程只能影響同一個線程組中的其他線程。ThreadGroup是一個管理線程組的類。這種方式可以保護線程來自不需要的更改。” “有時你必須運行你不能完全信任的代碼。所以將它的所有線程放在一個單獨的組中並阻止它們干擾主線程組的工作是很方便的。” “一個線程組可以包含其他組。這使您可以在分層樹中組織所有線程和組。在這樣的樹中,每個線程組(初始組除外)都有自己的父
線程優先級
Module 2: Java Nkyem
等級 13,
課堂 1
“讓我們繼續我們的課程。什麼是線程優先級以及為什麼需要它們? “在現實世界的問題中,不同線程正在執行的工作的重要性可能有很大差異。線程優先級的概念是為了控制這個過程而創建的。每個線程都有一個優先級,由 1 到 10 之間的數字表示。” “10是最高優先級。” “1是最低的。” “如果沒有給出優先級,則線程獲得優先級 5(正常)。” 線程的優先級不會顯著影響它的工作,而是更多的建議。如果有多個休眠線程需要運行,Java機器會先啟動一個優先級高的線程。 “Java 機器按照它認為
工廠方法模式
Module 2: Java Nkyem
等級 13,
課堂 2
此時,您可能已經遇到了設計模式。例如,單例。 讓我們回顧一下模式是什麼,為什麼需要它們,以及創建模式是什麼(單例就是一個例子)。我們還將研究一種新模式:工廠方法。 在軟件開發中,設計模式是一種可重複的架構構造,表示在某些重複出現的上下文中對設計問題的解決方案。 通常,模式不是可以直接轉換為代碼的最終解決方案。它只是可以在各種情況下使用的問題的模型解決方案。 創建型模式是處理對象創建過程的設計模式。它們使創建一個獨立於用於創建、組合和呈現對象的方法的系統成為可能。 工廠方法是一
可贖回和未來
Module 2: Java Nkyem
等級 13,
課堂 3
可運行問題 您已經熟悉Runnable接口和實現它的Thread類。讓我們回憶一下這個界面是什麼樣子的: public interface Runnable {
ExecutorService接口
Module 2: Java Nkyem
等級 13,
課堂 4
為什麼需要 Executor 接口? 在 Java 5 之前,您必須在應用程序中編寫所有自己的線程管理代碼。此外,創建一個新線程object 是一個資源密集型操作,為每個輕量級任務創建一個新線程沒有意義。並且因為這個問題對於多線程應用程序的每個開發人員來說絕對是熟悉的,所以他們決定將此功能作為Executor框架引入 Java 。 有什麼好主意?很簡單:不是為每個新任務創建一個新線程,線程被保存在一種“存儲”中,當一個新任務到達時,我們檢索一個現有線程而不是創建一個新線程。
停止一個 ExecutorService
Module 2: Java Nkyem
等級 13,
課堂 5
考慮一個簡單的程序: public static void main(String[] args) throws Exception {
線程池執行器
Module 2: Java Nkyem
等級 14,
課堂 0
在開發多線程應用程序時,我們通常必須處理組織線程的工作。我們的應用程序越大,多線程任務所需的線程越多,可運行我們創建的對象。 這裡需要注意的是,在 Java 中創建線程是一個相當昂貴的操作。如果我們每次都創建一個線程的新實例來執行一個操作,我們會在性能上遇到很大的問題,結果會影響應用程序的健康。 線程池和ThreadPoolExecutor在這里為我們提供幫助。 線程池是一組預先初始化的線程。它的大小可以是固定的或可變的。 如果任務多於線程,則任務在任務隊列中等待。池中的第
newSingleThreadExecutor 方法
Module 2: Java Nkyem
等級 14,
課堂 1
為什麼您可能需要 1 個線程的 ExecutorService? 您可以使用Executors.newSingleThreadExecutor方法創建一個ExecutorService,它帶有一個包含單個線程的池。pool的邏輯如下: 該服務一次只執行一項任務。 如果我們提交N個任務執行,所有N個任務都會被單線程一個接一個地執行。 如果線程被中斷,將創建一個新線程來執行任何剩餘的任務。 讓我們想像一下我們的程序需要以下功能的情況: 我們需要在 30 秒內處理用戶請求,但單位時
顯示更多
1
...
18
19
20
21
22
...
35
Please enable JavaScript to continue using this application.