AI Academy
促銷
CodeGym University
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題
課程
評論
關於我們
開始
開始學習
立即開始學習
My Progress
Courses
任務地圖
課程
Java
Java Core
等級 7
您已達到第 17 級!
Java 核心
等級 7,
課程 0
17級
多線程問題:訪問共享資源
Java 核心
等級 7,
課程 1
“你好,阿米戈!昨天我們討論了多線程的好處和便利。現在是時候看看缺點了。而且,不幸的是,它們並不小。” 以前,我們將程序視為一組相互調用方法的對象。現在一切都變得有點複雜了。一個程序更像是一組對象,有幾個“小機器人”(線程)在其中爬行並執行方法中包含的命令。 這個新的解釋並沒有取消第一個。它們仍然是對象,它們仍然調用彼此的方法。但是我們必須記住,有幾個線程,每個線程都有自己的工作或任務。 程序變得越來越複雜。不同的線程根據它們執行的任務改變不同對象的狀態。他們可以踩到對方的腳
涉及共享資源的任務:控制台輸出
Java 核心
等級 7,
課程 2
“你好,阿米戈!”
線程不是獨立的!同步!
Java 核心
等級 7,
課程 3
“你好,阿米戈!我們有靈丹妙藥——包治百病。正如我們已經看到的,不受控制的線程切換是一個問題。” “為什麼線程自己不能決定何時切換到下一個線程?做他們需要做的一切,然後發出信號,«我完成了!»?” “讓線程自己控制切換將是一個更大的問題。假設你有一些寫得不好的代碼,並且線程永遠不會交出 CPU。在過去,這就是它的工作方式。這簡直是一場噩夢。” “好吧。那麼解決辦法是什麼?” “阻塞其他線程。 這就是它的工作原理。” 很明顯,線程在嘗試使用共享對象和/或資源時會相互干擾。正如我
同步!實用版
Java 核心
等級 7,
課程 4
“你好,阿米戈!”
本地緩存:一個多線程問題。易揮發的
Java 核心
等級 7,
課程 5
“你好,阿米戈!你還記得艾莉跟你說過當多個線程試圖同時訪問一個共享資源時會出現的問題吧?” “是的。” “問題是,這還不是全部。還有一個小問題。” 如您所知,計算機具有存儲數據和命令(代碼)的內存,以及執行這些命令和處理數據的處理器。處理器從內存中讀取數據,對其進行更改,然後將其寫回內存。為了加快計算速度,處理器有自己內置的“快速”內存:高速緩存。 通過將最常用的變量和內存區域複製到緩存中,處理器運行得更快。然後它在這個快速內存中進行所有更改。然後它將數據複製回“慢速”內存。
用volatile練習
Java 核心
等級 7,
課程 6
“你好,阿米戈!”
屈服(放棄通行權)
Java 核心
等級 7,
課程 7
“你好,阿米戈!今天我們要上一堂簡短但有趣的課。我要告訴你關於yield 的知識,Thread 類的一個靜態方法。” Ellie 已經告訴過您,處理器不斷地在線程之間切換。每個線程都分配了一小段處理器時間,稱為quantum。當這個時間到期時,處理器切換到另一個線程並開始執行它的命令。調用Thread.yield()可讓您提前結束當前線程的量程。換句話說,它告訴處理器切換到下一個線程。 “但是為什麼一個線程需要將它的時間讓給另一個線程呢?” “這種情況並不經常發生。調用yie
來自教授的有用鏈接 — 17
Java 核心
等級 7,
課程 8
“好吧,阿米戈,你離獲得‘初級 Java 開發人員’的稱號又近了一步!你在理論和實踐方面都做得很好。恭喜!” “謝謝教授!不過你應該給我準備了一些有趣的東西吧?” “你猜對了!首先,我可以告訴你我是如何用已滅絕的機器人恐龍的四肢製造我的第一台宇宙激光器的……” “也許下次吧,教授?” “好吧,好吧。那麼就來點家庭讀物吧。” 線程同步。同步運算符 在訓練的初始階段,線程通常彼此獨立工作。現在您已經熟悉了多線程,您知道不同的線程可以同時與同一組數據進行交互並對其進行修改。為避免混
你的電腦裡面有什麼?
Java 核心
等級 7,
課程 9
“你好阿米哥!今天的任務完成的很好,坐下看視頻吧。”
獎勵任務 | 第 10 課 | 7級
Java 核心
等級 7,
課程 10
“嘿,士兵!” “你好,船長!” “我有好消息要告訴你。這裡有一些練習可以加強你的技能。每天做這些練習,你的技能將以驚人的速度增長。它們是專為 IntelliJ IDEA 創建的。” “之前的那些練習是針對新手的。我為老手添加了一些更高級的獎勵練習。只針對老手。”
Please enable JavaScript to continue using this application.