CodeGym University
學習
課程
任務
問卷及小測驗
遊戲
幫助
學習提醒時程表
社群
使用者
論壇
聊天
文章
成功故事
活動
評論
訂閱
亮色主題
課堂
評論
關於我們
開始
開始學習
現在就開始學習
探索地圖
課堂
所有探索
所有等級
創建和啟動新線程
Module 2: Java Nkyem
等級 11,
課堂 1
“你好,Amigo!Ellie 向你介紹了線程,我將告訴你如何使用它們。要創建一個新線程,你需要:” 1) 創建線程對象 2)將它傳遞給你想要運行的方法 3) 在創建的Thread對像上調用start方法。 考慮這個例子: 代碼 描述 class Printer implements Runnable
健康睡眠
Module 2: Java Nkyem
等級 11,
課堂 2
“你好,阿米戈!今天Bilaabo 將告訴你我們在使用線程時使用的最有趣的方法:睡眠。睡眠方法被聲明為 Thread 類的靜態方法,即它不附加到任何對象。目的這種方法是讓程序“睡著”一會兒。這是它的工作原理:“ 代碼 描述 public static void main(String[] args)
停止線程:非官方版本
Module 2: Java Nkyem
等級 11,
課堂 3
“你好,阿米戈!這是一個有趣的問題,你要么已經遇到過,要么很快就會遇到。如何停止正在運行的線程? ” 假設用戶告訴程序«從互聯網下載文件»。主線程為此作業創建一個單獨的子線程,並向其傳遞一個對象,該對象的運行方法包含下載文件的所有必要操作。 但是用戶突然改變了主意。他不想下載文件。我們如何取消作業並停止線程? “是的,告訴我怎麼做?” “我們不能。這是最常見和最正確的答案。你不能停止線程。只有它可以停止自己。 ” 但是您可以向線程發送信號,以某種方式告訴它不再需要執行工作並且
停止線程:官方版
Module 2: Java Nkyem
等級 11,
課堂 4
“你好,阿米戈!你不得不承認艾莉的取消計劃非常棒。” “是的。” “實際上, Thread類中存在類似的東西。只是變量不叫isCancel。它叫isInterrupt。用於停止線程的方法不是cancel()。它是interrupt()。” “真的嗎?” “是的。檢查一下:” 代碼 描述 class Clock implements Runnable
該級別的附加課程
Module 2: Java Nkyem
等級 11,
課堂 5
多線程:Thread類的方法 在本課中,我們將繼續討論多線程。我們將探討Thread類及其幾個方法的工作原理。 以前我們研究類方法的時候,一般都是這樣寫的:“方法名”->“方法做什麼”。對於Thread類的方法,我們不能這樣做:) 它們有更複雜的邏輯,如果沒有幾個例子,幾乎不可能弄清楚。 文章精選:Better together: Java and the Thread class 第 1 部分 — 線程 第 2 部分 — 同步 第 3 部分 — 交互 第 4 部分 — Ca
多線程問題:訪問共享資源
Module 2: Java Nkyem
等級 12,
課堂 0
“你好,阿米戈!昨天我們討論了多線程的好處和便利。現在是時候看看缺點了。而且,不幸的是,它們並不小。” 以前,我們將程序視為一組相互調用方法的對象。現在一切都變得有點複雜了。一個程序更像是一組對象,有幾個“小機器人”(線程)在其中爬行並執行方法中包含的命令。 這個新的解釋並沒有取消第一個。它們仍然是對象,它們仍然調用彼此的方法。但是我們必須記住,有幾個線程,每個線程都有自己的工作或任務。 程序變得越來越複雜。不同的線程根據它們執行的任務改變不同對象的狀態。他們可以踩到對方的腳
線程不是獨立的!同步!
Module 2: Java Nkyem
等級 12,
課堂 1
“你好,阿米戈!我們有靈丹妙藥——包治百病。正如我們已經看到的,不受控制的線程切換是一個問題。” “為什麼線程自己不能決定何時切換到下一個線程?做他們需要做的一切,然後發出信號,«我完成了!»?” “讓線程自己控制切換將是一個更大的問題。假設你有一些寫得不好的代碼,並且線程永遠不會交出 CPU。在過去,這就是它的工作方式。這簡直是一場噩夢。” “好吧。那麼解決辦法是什麼?” “阻塞其他線程。 這就是它的工作原理。” 很明顯,線程在嘗試使用共享對象和/或資源時會相互干擾。正如我
本地緩存:一個多線程問題。易揮發的
Module 2: Java Nkyem
等級 12,
課堂 2
“你好,阿米戈!你還記得艾莉跟你說過當多個線程試圖同時訪問一個共享資源時會出現的問題吧?” “是的。” “問題是,這還不是全部。還有一個小問題。” 如您所知,計算機具有存儲數據和命令(代碼)的內存,以及執行這些命令和處理數據的處理器。處理器從內存中讀取數據,對其進行更改,然後將其寫回內存。為了加快計算速度,處理器有自己內置的“快速”內存:高速緩存。 通過將最常用的變量和內存區域複製到緩存中,處理器運行得更快。然後它在這個快速內存中進行所有更改。然後它將數據複製回“慢速”內存。
屈服(放棄通行權)
Module 2: Java Nkyem
等級 12,
課堂 3
“你好,阿米戈!今天我們要上一堂簡短但有趣的課。我要告訴你關於yield 的知識,Thread 類的一個靜態方法。” Ellie 已經告訴過您,處理器不斷地在線程之間切換。每個線程都分配了一小段處理器時間,稱為quantum。當這個時間到期時,處理器切換到另一個線程並開始執行它的命令。調用Thread.yield()可讓您提前結束當前線程的量程。換句話說,它告訴處理器切換到下一個線程。 “但是為什麼一個線程需要將它的時間讓給另一個線程呢?” “這種情況並不經常發生。調用yie
加入——等待線程結束
Module 2: Java Nkyem
等級 12,
課堂 4
“你好,阿米戈!我看到你在學習線程方面取得了長足的進步。” “畢竟沒那麼難。” 那太棒了!今天給大家上一節簡單的課,主題是join方法。 想像一下下面的情況:主線程創建了一個子線程來執行一些任務。時間流逝,現在主線程需要子線程執行工作的結果。但是子線程還沒有完成它的工作。主線程應該做什麼? 好問題。主線程應該做什麼? “這就是join方法的用途。它允許我們讓一個線程等待另一個線程完成其工作:” 代碼 描述 class Printer implements Runnable
死鎖及其原因
Module 2: Java Nkyem
等級 12,
課堂 5
“嗨,阿米戈!” “今天我要告訴你什麼是死鎖。” “嘿,你已經和我說過類似的事情了。” “是的,我做到了。但今天我們將更詳細地考慮這個話題。” “在最簡單的情況下,死鎖涉及兩個線程和兩個互斥對象。互鎖發生在:” A)每個線程都需要獲取兩個互斥量。 B) 第一個線程已經獲取了第一個互斥鎖,正在等待第二個互斥鎖被釋放。 C) 第二個線程獲得了第二個互斥體,正在等待第一個互斥體被釋放。 “這裡有些例子: 例子 public class Student
避免死鎖的策略
Module 2: Java Nkyem
等級 12,
課堂 6
“嗨,阿米戈!” “我想告訴你一些避免死鎖的策略。” “最好的策略是一個深思熟慮的架構和一組規則來管理你何時以及以什麼順序可以使用鎖(獲取互斥量)。解決這個問題的經典方法是開發一個鎖層次結構並建立某些鎖永遠不能被使用的規則在已經獲得某些其他鎖的狀態下獲得。” “比如,有時候鎖是分級別的,要求一個線程按照從高級別到低級別的順序去獲取鎖(但是反方向獲取鎖是不允許的)。另外,獲取多個同級別的鎖也是不可以的允許。” “例如,在前面的騎士示例中,我們可以為每個騎士添加一個唯一編號 (i
顯示更多
1
...
17
18
19
20
21
...
35
Please enable JavaScript to continue using this application.