狠狠撸
Submit Search
执行绪与并行础笔滨
Jan 20, 2018
2 likes
884 views
Justin Lin
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
Read less
Read more
1 of 133
Download now
Downloaded 73 times
Recommended
输入输出
输入输出
Justin Lin
?
瞭解串流與输入输出的關係 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用输入输出裝飾器類別
Java SE 8 技術手冊第 11 章 - 执行绪与并行础笔滨
Java SE 8 技術手冊第 11 章 - 执行绪与并行础笔滨
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
并行与平行
并行与平行
Justin Lin
?
《Python 3.5 技術手冊》第 13 章投影片
资料永续与交换
资料永续与交换
Justin Lin
?
《Python 3.5 技術手冊》第 10 章投影片
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
?
認識NIO 使用Channel與Buffer 使用NIO2檔案系統
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Justin Lin
?
Java SE 7 技術手冊
Java SE 7 技術手冊投影片第 10 章 - 输入输出
Java SE 7 技術手冊投影片第 10 章 - 输入输出
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
?
進階自訂泛型 進階自訂列舉 使用標準標註 自訂與讀取標註
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
這個投影片是搭配《Java Tutorial》課程,你可以在 CodeData 上看到所有內容,也可以直接在 Google Play 或 Pubu 上搜尋 "Java Tutorial" 以購得電子書。
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
流程语法与函式
流程语法与函式
Justin Lin
?
《Python 3.5 技術手冊》第 4 章投影片
如何用闯顿碍8实作一个小型的关联式资料库系统
如何用闯顿碍8实作一个小型的关联式资料库系统
なおき きしだ
?
Java Developer Day Taipei 2014
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 10 章 - 输入输出
Java SE 8 技術手冊第 10 章 - 输入输出
Justin Lin
?
瞭解串流與输入输出的關係 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用输入输出裝飾器類別
从模组到类别
从模组到类别
Justin Lin
?
《Python 3.5 技術手冊》第 5 章投影片
9. meta-programming
9. meta-programming
Justin Lin
?
探索物件特性 判斷物件型態 認識Reflect API 結合Proxy與Reflect API
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
?
瞭解與設定PATH 瞭解與指定CLASSPATH 瞭解與指定SOURCEPATH 使用package與import管理類別 初步認識JDK與IDE的對應
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊
7. 錯誤處理
7. 錯誤處理
Justin Lin
?
認識throw使用時機 使用try-catch處理錯誤 處理Promise錯誤 結合await、await與try-catch
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok
?
Brief introduction of Nashorn on JDK 8. Delivered at ADC 2013 (http://adc.alibabatech.org/), on July 14, 2013. Full version of slides coming soon.
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
建興 王
?
簡介 Java-based 的全文搜尋引擎 Lucene 的概念及基本實作
例外处理
例外处理
Justin Lin
?
使用 try、except 處理例外 認識例外繼承架構 認識 raise 使用時機 運用 finally 清除資源 使用 with as 管理資源
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
?
認識Lambda語法 運用方法參考 瞭解介面預設方法 善用Functional與Stream API Lambda與平行化
全文搜寻引擎的进阶实作与应用
全文搜寻引擎的进阶实作与应用
建興 王
?
CH11:执行绪与并行础笔滨
CH11:执行绪与并行础笔滨
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
Big Java, Big Data
Big Java, Big Data
Kuo-Chun Su
?
JavaTWO 2012 研討會 Big Java, Big Data 投影片,範例在 http://min.us/mlc5vLupU/1,一個是 Spring Data Hadoop 的範例,另一個是其他所有的範例。
6. 非同步設計
6. 非同步設計
Justin Lin
?
區別同步與非同步 運用Promise API 善用async、await 認識for-await-of 使用非同步產生器函式
More Related Content
What's hot
(20)
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
這個投影片是搭配《Java Tutorial》課程,你可以在 CodeData 上看到所有內容,也可以直接在 Google Play 或 Pubu 上搜尋 "Java Tutorial" 以購得電子書。
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
瞭解封裝觀念與實現 定義類別、建構式與方法 使用方法重載與不定長度引數 瞭解static成員
流程语法与函式
流程语法与函式
Justin Lin
?
《Python 3.5 技術手冊》第 4 章投影片
如何用闯顿碍8实作一个小型的关联式资料库系统
如何用闯顿碍8实作一个小型的关联式资料库系统
なおき きしだ
?
Java Developer Day Taipei 2014
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 10 章 - 输入输出
Java SE 8 技術手冊第 10 章 - 输入输出
Justin Lin
?
瞭解串流與输入输出的關係 認識InputStream、OutputStream繼承架構 認識Reader、Writer繼承架構 使用输入输出裝飾器類別
从模组到类别
从模组到类别
Justin Lin
?
《Python 3.5 技術手冊》第 5 章投影片
9. meta-programming
9. meta-programming
Justin Lin
?
探索物件特性 判斷物件型態 認識Reflect API 結合Proxy與Reflect API
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
?
Java SE 7 技術手冊
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
?
瞭解與設定PATH 瞭解與指定CLASSPATH 瞭解與指定SOURCEPATH 使用package與import管理類別 初步認識JDK與IDE的對應
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
Java SE 7 技術手冊
7. 錯誤處理
7. 錯誤處理
Justin Lin
?
認識throw使用時機 使用try-catch處理錯誤 處理Promise錯誤 結合await、await與try-catch
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok
?
Brief introduction of Nashorn on JDK 8. Delivered at ADC 2013 (http://adc.alibabatech.org/), on July 14, 2013. Full version of slides coming soon.
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
建興 王
?
簡介 Java-based 的全文搜尋引擎 Lucene 的概念及基本實作
例外处理
例外处理
Justin Lin
?
使用 try、except 處理例外 認識例外繼承架構 認識 raise 使用時機 運用 finally 清除資源 使用 with as 管理資源
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
?
認識Lambda語法 運用方法參考 瞭解介面預設方法 善用Functional與Stream API Lambda與平行化
全文搜寻引擎的进阶实作与应用
全文搜寻引擎的进阶实作与应用
建興 王
?
CH11:执行绪与并行础笔滨
CH11:执行绪与并行础笔滨
Justin Lin
?
認識Thread與Runnable 使用synchronized 使用wait()、notify()、notifyAll() 運用高階並行API
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
?
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
?
流程语法与函式
流程语法与函式
Justin Lin
?
如何用闯顿碍8实作一个小型的关联式资料库系统
如何用闯顿碍8实作一个小型的关联式资料库系统
なおき きしだ
?
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
?
Java SE 8 技術手冊第 10 章 - 输入输出
Java SE 8 技術手冊第 10 章 - 输入输出
Justin Lin
?
从模组到类别
从模组到类别
Justin Lin
?
9. meta-programming
9. meta-programming
Justin Lin
?
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
?
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
?
7. 錯誤處理
7. 錯誤處理
Justin Lin
?
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok
?
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
建興 王
?
例外处理
例外处理
Justin Lin
?
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
?
全文搜寻引擎的进阶实作与应用
全文搜寻引擎的进阶实作与应用
建興 王
?
CH11:执行绪与并行础笔滨
CH11:执行绪与并行础笔滨
Justin Lin
?
Similar to 执行绪与并行础笔滨
(20)
Big Java, Big Data
Big Java, Big Data
Kuo-Chun Su
?
JavaTWO 2012 研討會 Big Java, Big Data 投影片,範例在 http://min.us/mlc5vLupU/1,一個是 Spring Data Hadoop 的範例,另一個是其他所有的範例。
6. 非同步設計
6. 非同步設計
Justin Lin
?
區別同步與非同步 運用Promise API 善用async、await 認識for-await-of 使用非同步產生器函式
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
?
本簡報是 Will 保哥在 TechDays Taiwan 2015 的演講內容。 課程代號: DEV305 課程主題: ASP.NET 5 開發攻略 課程說明: ASP.NET 5 是一個跨平台的開放原始碼程式框架,在本課程中,除了介紹有關 ASP.NET 5 的最新資訊外,也會介紹ASP.NET的跨平台特性,讓你的ASP.NET 5應用程式在不同作業系統之間也能順利運作,對身為開發人員的你來說,必修課就在這! 課程等級: 300
Multithread
Multithread
Medivh2011
?
JavaSE6.0 Note
并行、平行与非同步
并行、平行与非同步
Justin Lin
?
認識并行、平行与非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
認識并行、平行与非同步 使用 threading 模組 使用 multiprocessing 模組 使用 concurrent.futures模組 運用 async、await 與 asyncio
Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)
Chu-Siang Lai
?
Mirror from https://speakerdeck.com/chusiang/continuous-delivery-with-ansible-x-gitlab-ci-2e # DevOps 人一定要知道的 Ansible & GitLab CI 持續交付技巧 (2/e) Ansible 是個與 Puppet, Salt, Chef 並列的 Infrastructure as Code 組態設定工具,其簡單易用的特性更讓人愛不釋手;GitLab 是業界很常見的 Git 私有版本控制服務,搭配其 GitLab CI 將能快速建立屬於自己的 CI/CD Pipeline 與自動化部署。 本次凍仁將會藉由 Ansible 和 GitLab 帶領大家一探持續部署的世界和 DevOps 的威力! #DevOpsTaiwan #DevOpsTW #Agile #Meetup > https://devops.kktix.cc/events/meetup-kaohsiung-1
Node分享 展烨
Node分享 展烨
tb-vertical-guide
?
node js 入门,by展烨
厂丑别别辫诲辞驳内部实现机制
厂丑别别辫诲辞驳内部实现机制
Liu Yuan
?
Distributed block storage system dedicated for KVM/QEMU based virtual machines
LabView with Lego NXT
LabView with Lego NXT
CAVEDU Education
?
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
?
# DevOps 人一定要知道的持續交付技巧 - Ansible & GitLab CI 實戰演練 > Mirror from https://speakerdeck.com/chusiang/continuous-delivery-workshop-with-ansible-x-gitlab-ci Ansible 是個與 Puppet, Salt, Chef 並列其四的 Infrastructure as Code 組態設定工具,其簡單易用的特性讓人愛不釋手;GitLab 是業界常見的 Git 私有版本控制服務,搭配其 GitLab CI 更能建立屬於自己的發佈流程。 本次凍仁將藉由工作坊的形式,帶領大家一探持續交付的世界和自動化的威力! * 活動網址: https://www.meetup.com/DigitalOceanHsinchu/events/243518189/ * Gist note: https://gist.github.com/chusiang/56843a737b8c3931c1736d6939a4e172 #Ansible #GitLab #DevOps #Workshop
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
Chu-Siang Lai
?
Mirror from https://speakerdeck.com/chusiang/continuous-delivery-with-ansible-x-gitlab-ci . # DevOps 人一定要知道的 Ansible & GitLab CI 持續交付技巧 Ansible 是個與 Puppet, Salt, Chef 並列的 Infrastructure as Code 組態設定工具,其簡單易用的特性更讓人愛不釋手;GitLab 是業界很常見的 Git 私有版本控制服務,搭配其 GitLab CI 將能快速建立屬於自己的 CI/CD Pipeline 與自動化部署。 本次凍仁將會藉由 Ansible 和 GitLab 帶領大家一探持續部署的世界和 DevOps 的威力! #DevOpsTaiwan #DevOpsTW #COSCUP #COSCUP2017 > http://coscup.org/2017/#/schedule/day1/3071450
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
?
02.辫测迟丑辞苍.开发最佳实践
02.辫测迟丑辞苍.开发最佳实践
Na Lee
?
Chapter2
Chapter2
Fang-Ling Lin
?
核心, 行程管理
贰谤濒补苍驳游戏开发
贰谤濒补苍驳游戏开发
litaocheng
?
讲述如何使用Erlang+Redis开发Social Game(ECUG V Topic)
beidakejian
beidakejian
hanxuebing
?
about java
Elastic stack day-1
Elastic stack day-1
YI-CHING WU
?
this is a Elastic stack training material
Geo science cafe 如何找到一份满意的工作
Geo science cafe 如何找到一份满意的工作
kewuc
?
豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验
drewz lin
?
Big Java, Big Data
Big Java, Big Data
Kuo-Chun Su
?
6. 非同步設計
6. 非同步設計
Justin Lin
?
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
Will Huang
?
Multithread
Multithread
Medivh2011
?
并行、平行与非同步
并行、平行与非同步
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)
Chu-Siang Lai
?
Node分享 展烨
Node分享 展烨
tb-vertical-guide
?
厂丑别别辫诲辞驳内部实现机制
厂丑别别辫诲辞驳内部实现机制
Liu Yuan
?
LabView with Lego NXT
LabView with Lego NXT
CAVEDU Education
?
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
?
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
Chu-Siang Lai
?
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
?
02.辫测迟丑辞苍.开发最佳实践
02.辫测迟丑辞苍.开发最佳实践
Na Lee
?
Chapter2
Chapter2
Fang-Ling Lin
?
贰谤濒补苍驳游戏开发
贰谤濒补苍驳游戏开发
litaocheng
?
beidakejian
beidakejian
hanxuebing
?
Elastic stack day-1
Elastic stack day-1
YI-CHING WU
?
Geo science cafe 如何找到一份满意的工作
Geo science cafe 如何找到一份满意的工作
kewuc
?
豆瓣I os自动化测试实践和经验
豆瓣I os自动化测试实践和经验
drewz lin
?
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
認識 Spring Boot 認識 Spring Tool Suite 遷移微網誌至 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
區別程式庫與框架 逐步善用 Spring MVC 簡介 Thymeleaf 模版 使用 Spring Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
使用 Gradle 結合 Gradle 與 IDE 認識相依注入 使用 Spring 核心
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
寄送純文字郵件 寄送 HTML 郵件 寄送附檔郵件
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
了解 Java EE 安全概念與名詞 使用容器基本驗證與表單驗 使用 HTTPS 保密資料傳輸
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
了解 JDBC 架構 使用基本的 JDBC 透過 JNDI 取得DataSource 在 Web 應用程式整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
使用 Tag File 自訂標籤 使用 Simple Tag 自訂標籤 使用 Tag 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
了解何謂 JSTL 使用 JSTL 核心標籤庫 使用 JSTL 格式標籤庫 使用 JSTL XML 標籤庫 使用 JSTL 函式標籤庫
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
了解 JSP 生命週期 使用 JSP 語法元素 使用 JSP 標準標籤 使用運算式語言(EL) 自訂 EL 函式
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
了解 Servlet 生命週期 使用 ServletConfig 與ServletContext 使用 PushBuilder 各種傾聽器的使用 繼承 HttpFilter 實作過濾器
Ch04 會話管理
Ch04 會話管理
Justin Lin
?
了解會話管理基本原理 使用 Cookie 類別 使用 HttpSession 會話管理 了解容器會話管理原理
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
取得請求參數與標頭 處理中文字元請求與回應 設定與取得請求範圍屬性 使用轉發、包含、重新導向
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
開發環境準備與使用 了解 Web 應用程式架構 Servlet 撰寫與部署設定 了解 URI 模式對應 使用 web-fragement.xml
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
認識 HTTP 基本特性 了解何為 URI 編碼 認識 Web 容器角色 了解 Servlet 與 JSP 的關係 認識 MVC/Model 2
14. 進階主題
14. 進階主題
Justin Lin
?
運用描述器 實作裝飾器 定義 meta 類別 使用相對匯入 泛型進階
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
使用 pdb 模組除錯 對程式進行單元測試 使用 timeit 評測程式片段 使用 cProfile(profile)察看評測數據
11. 常用內建模組
11. 常用內建模組
Justin Lin
?
處理日期與時間 認識日誌的使用 運用規則表示式 管理檔案與目錄 URL 處理
10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
使用 pickle 與 shelve 認識 DB-API 2.0 使用 sqlite3 模組 處理 CSV、JSON、XML
9. 資料結構
9. 資料結構
Justin Lin
?
認識 hashable、iterable、orderable 對物件進行排序 認識群集架構 運用 collections 模組 運用 collections.abc 模組
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
使用 open()函式 使用 stdin、stdout、stderr 認識檔案描述器 認識 io 模組
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
14. 進階主題
14. 進階主題
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
11. 常用內建模組
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
9. 資料結構
9. 資料結構
Justin Lin
?
8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin
?
执行绪与并行础笔滨
1.
1
2.
执行绪与并行础笔滨 學習目標 ? 認識Thread與Runnable ? 使用synchronized ?
使用wait()、notify()、notifyAll() ? 運用高階並行API 2
3.
簡介執行緒 ? 如果要設計一個龜兔賽跑遊戲,賽程長度為 10步,每經過一秒,烏龜會前進一步,免子 則可能前進兩步或睡覺,那該怎麼設計呢? 3
4.
4
5.
簡介執行緒 ? 如果可以撰寫程式再啟動兩個流程,一個是 烏龜流程,一個免子流程,程式邏輯會比較 清楚 … ?
如果想在main()以外獨立設計流程,可以撰 寫類別實作java.lang.Runnable介面, 流程的進入點是實作在run()方法中 … 5
6.
6
7.
7
8.
簡介執行緒 ? 可以建構Thread實例來執行Runnable實例 定義的run()方法 8
9.
Thread與Runnable ? JVM是台虛擬電腦,只安裝一顆稱為主執行 緒的CPU,可執行main()定義的執行流程 ? 如果想要為JVM加裝CPU,就是建構Thread 實例,要啟動額外CPU就是呼叫Thread實例 的start()方法 ?
額外CPU執行流程的進入點,可以定義在 Runnable介面的run()方法中 9
10.
Thread與Runnable ? 除了將流程定義在Runnable的run()方法 中之外,另一個撰寫多執行緒程式的方式, 是繼承Thread類別,重新定義run()方法 10
11.
Thread與Runnable 11
12.
Thread與Runnable ? Thread類別本身也實作了Runnable介面, 而run()方法的實作如下: 12
13.
Thread與Runnable ? 實作Runnable於run()中定義額外流程好? 還是繼承Thread於run()中定義額外流程 好? – 實作Runnable介面的好處就是較有彈性,你的 類別還有機會繼承其它類別 –
若繼承了Thread,那該類別就是一種Thread, 通常是為了直接利用Thread中定義的一些方法, 才會繼承Thread來實作 13
14.
Thread與Runnable ? 在JDK8中,由於可以使用Lambda表示式 14
15.
執行緒生命周期 ? 如果主執行緒中啟動了額外執行緒,預設會 等待被啟動的所有執行緒都執行完run()方 法才中止JVM ? 如果一個Thread被標示為Daemon執行緒, 在所有的非Daemon執行緒都結束時,JVM自 動就會終止 15
16.
執行緒生命周期 16
17.
執行緒生命周期 17
18.
執行緒生命周期 ? 執行緒有其優先權,可使用Thread的 setPriority()方法設定優先權 – 可設定值為1(Thread.MIN_PRIORITY)到10 (Thread.MAX_PRIORITY),預設是5 (Thread.NORM_PRIORITY) –
超出1到10外的設定值會拋出 IllegalArgumentException ? 數字越大優先權越高,排班器越優先排入CPU,如 果優先權相同,則輸流執行(Round-robin) 18
19.
執行緒生命周期 ? 有幾種狀況會讓執行緒進入Blocked狀態 – 呼叫Thread.sleep()方法 –
進入synchronized前競爭物件鎖定的阻斷 – 呼叫wait()的阻斷 – 等待输入输出完成 ? 當某執行緒進入Blocked時,讓另一執行緒排 入CPU執行(成為Running狀態),避免CPU 空閒下來,經常是改進效能的方式之一 19
20.
20
21.
21
22.
執行緒生命周期 ? 執行緒因输入输出進入Blocked狀態後,在完 成输入输出後,會回到Runnable狀態,等待 排班器排入執行(Running狀態) ? 一個進入Blocked狀態的執行緒,可以由另一 個執行緒呼叫該執行緒的interrupt()方 法,讓它離開Blocked狀態 22
23.
執行緒生命周期 23
24.
執行緒生命周期 ? 如果A執行緒正在運行,流程中允許B執行緒 加入,等到B執行緒執行完畢後再繼續A執行 緒流程,則可以使用join()方法完成需求 ? 當執行緒使用join()加入至另一執行緒時, 另一執行緒會等待被加入的執行緒工作完畢, 然後再繼續它的動作 24
25.
25
26.
執行緒生命周期 ? 有時候加入的執行緒可能處理太久,你不想 無止境等待這個執行緒工作完畢,則可以在 join()時指定時間 26
27.
執行緒生命周期 ? 執行緒完成run()方法後,就會進入Dead ? 進入Dead(或已經呼叫過start()方法)的 執行緒不可以再度呼叫start()方法,否則 會拋出IllegalThreadStateException 27
28.
執行緒生命周期 ? Thread類別上定義有stop()方法,不過被 標示為Deprecated 28
29.
執行緒生命周期 ? 使用了被標示為Deprecated的API,編譯器會提出警 告,而在IDE中,通常會出現刪除線表示不建議使 用 ? 直接呼叫Thread的stop()方法,將不理會你所設 定的釋放、取得鎖定流程,執行緒會直接釋放所有 已鎖定物件,有可能使物件陷入無法預期狀態 ?
除了stop()方法外,Thread的resume()、 suspend()、destroy()等方法也不建議再使用 29
30.
執行緒生命周期 ? 要停止執行緒,最好自行實作,讓執行緒跑 完應有的流程,而非呼叫Thread的stop() 方法 30
31.
執行緒生命周期 ? 不僅有停止執行緒必須自行根據條件實作, 執行緒的暫停、重啟,也必須視需求實作, 而不是直接呼叫suspend()、resume()等 方法 31
32.
關於ThreadGroup ? 每個執行緒都屬於某個執行緒群組 ? 可以使用以下程式片段取得目前執行緒所屬 執行緒群組名稱: 32
33.
關於ThreadGroup ? 每個執行緒產生時,都會歸入某個執行緒群 組,這視執行緒是在哪個群組中產生 ? 如果沒有指定,則歸入產生該子執行緒的執 行緒群組 ?
可以自行指定執行緒群組,執行緒一但歸入 某個群組,就無法更換群組 33
34.
關於ThreadGroup ? java.lang.ThreadGroup類別可以管理 群組中的執行緒,可以使用以下方式產生群 組,並在產生執行緒時指定所屬群組: 34
35.
關於ThreadGroup ? ThreadGroup的某些方法,可以對群組中 所有執行緒產生作用 – 例如interrupt()方法可以中斷群組中所有執 行緒,setMaxPriority()方法可以設定群組 中所有執行緒最大優先權(本來就擁有更高優先 權的執行緒不受影響) 35
36.
關於ThreadGroup ? 想要一次取得群組中所有執行緒,可以使用 enumerate()方法 36
37.
關於ThreadGroup ? ThreadGroup中有個uncaughtException()方 法,群組中某個執行緒發生例外而未捕捉時,JVM 會呼叫此方法進行處理 – 如果ThreadGroup有父ThreadGroup,就會呼叫父 ThreadGroup的uncaughtException()方法 –
否則看看例外是否為ThreadDeath實例,若是什麼都不 作,若否則呼叫例外的printStrackTrace() ? 如果必要定義ThreadGroup中執行緒的例外处理 行為,可以重新定義此方法 37
38.
關於ThreadGroup 38
39.
關於ThreadGroup ? 在JDK5之後,如果ThreadGroup中的執行緒發生 例外時 … –
如果ThreadGroup有父ThreadGroup,就會呼叫父 ThreadGroup的uncaughtException()方法 – 否則,看看Thread是否使用 setUncaughtExceptionHandler()方法設定 Thread.UncaughtExceptionHandler實例,有的話 就會呼叫其uncaughtException()方法 – 否則,看看例外是否為ThreadDeath實例,若「是」什 麼都不作,若「否」則呼叫例外的 printStrackTrace() 39
40.
關於ThreadGroup ? 對於執行緒本身未捕捉的例外,可以自行指 定處理方式了 … 40
41.
41
42.
synchronized與volatile ? 還記得6.2.5曾經開發過一個ArrayList類別 嗎? 42
43.
synchronized與volatile ? 如果你嘗試執行程式,「有可能」會發生 ArrayIndexOutOfBoundsException例 外… ? 執行緒存取同一物件相同資源時所引發的競 速情況(Race
condition) … 43
44.
synchronized與volatile ? 可以在add()方法上加上synchronized關 鍵字 44
45.
synchronized與volatile ? 每個物件都會有個內部鎖定(IntrinsicLock), 或稱為監控鎖定(Monitor lock) ?
被標示為synchronized的區塊將會被監控,任 何執行緒要執行synchronized區塊都必須先取 得指定的物件鎖定 45
46.
synchronized與volatile 46
47.
synchronized與volatile ? synchronized不只可宣告在方法上,也可 以陳述句方式使用 47
48.
synchronized與volatile ? 對於本身設計時沒有考慮競速問題的API來說, 也可以如下撰寫: 48
49.
synchronized與volatile ? 第9章介紹過的Collection與Map,都未考慮執行 緒安全 ? 可以使用Collections的… –
synchronizedCollection() – synchronizedList() – synchronizedSet() – synchronizedMap() ? 這些方法會將傳入的Collection、List、Set、 Map實作物件包裹,傳回具執行緒安全的物件 49
50.
synchronized與volatile ? 如果你經常如下進行List操作: 50
51.
synchronized與volatile ? 使用synchronized陳述句,可以作到更細 部控制,例如提供不同物件作為鎖定來源… 51
52.
52
53.
synchronized與volatile ? Java的synchronized提供的是可重入同步(Reentrant Synchronization) – 執行緒取得某物件鎖定後,若執行過程中又要執行 synchronized時,嘗試取得鎖定的物件來源又是同一 個,則可以直接執行 ?
由於執行緒無法取得鎖定時會造成阻斷,不正確地 使用synchronized有可能造成… – 效能低落 – 死結(Dead lock) 53
54.
synchronized與volatile 54
55.
synchronized與volatile 55
56.
synchronized與volatile ? synchronized要求達到的所標示區塊的互 斥性(Mutual exclusion)與可見性 (Visibility) –
互斥性是指synchronized區塊同時間只能有一 個執行緒 – 可見性是指執行緒離開synchronized區塊後, 另一執行緒接觸到的就是上一執行緒改變後的物 件狀態 56
57.
synchronized與volatile ? 在Java中對於可見性的要求,可以使用 volatile達到變數範圍 57
58.
58
59.
59
60.
synchronized與volatile ? 可以在變數上宣告volatile,表示變數是 不穩定、易變的 – 也就是可能在多執行緒下存取,這保證變數的可 見性,也就是若有執行緒變動了變數值,另一執 行緒一定可看到變更 ?
被標示為volatile的變數,不允許執行緒 快取,變數值的存取一定是在共享記憶體中 進行 60
61.
61
62.
synchronized與volatile ? volatile保證的是單一變數的可見性, – 執行緒對變數的存取一定是在共享記憶體中,不 會在自己的記憶體空間中快取變數,執行緒對共 享記憶體中變數的存取,另一執行緒一定看得到 62
63.
synchronized與volatile ? 以下是個正確使用volatile的例子: 63
64.
等待與通知 ? wait()、notify()與notifyAll()是Object 定義的方法 – 可以透過這三個方法控制執行緒釋放物件的鎖定,或者 通知執行緒參與鎖定競爭 ?
執行synchronized範圍的程式碼期間,若呼叫鎖 定物件的wait()方法,執行緒會釋放物件鎖定, 並進入物件等待集合(Wait set)而處於阻斷狀 態 ? 其它執行緒可以競爭物件鎖定,取得鎖定的執行緒 可以執行synchronized範圍的程式碼 64
65.
等待與通知 ? 放在等待集合的執行緒不會參與CPU排班 ? wait()可以指定等待時間,時間到之後執行 緒會再度加入排班 –
如果指定時間0或不指定,則執行緒會持續等待, 直到被中斷(呼叫interrupt())或是告知 (notify())可以參與排班 65
66.
等待與通知 ? 被競爭鎖定的物件之notify()呼叫時,會 從物件等待集隨機通知一個執行緒加入排班 – 再度執行synchronized前,被通知的執行緒會 與其它執行緒共同競爭物件鎖定 ?
如果呼叫notifyAll(),所有等待集中的 執行緒都會被通知參與排班,這些執行緒會 與其它執行緒共同競爭物件鎖定 66
67.
等待與通知 67
68.
等待與通知 ? 生產者與消費者 … 68
69.
等待與通知 69
70.
等待與通知 70
71.
等待與通知 71
72.
等待與通知 ? 使用以下的程式來示範Producer、 Consumer與Clerk: 72
73.
Lock、ReadWriteLock與Condition ? java.util.concurrent.locks套件中 提供Lock、ReadWriteLock、 Condition介面以及相關實作類別 – 可以提供類似synchronized、wait()、 notify()、notifyAll()的作用,以及更多 高階功能 73
74.
Lock、ReadWriteLock與Condition 74
75.
Lock、ReadWriteLock與Condition 75
76.
Lock、ReadWriteLock與Condition ? Lock介面還定義了tryLock()方法,如果 執行緒呼叫tryLock()可以取得鎖定會傳回 true,若無法取得鎖定傳回false 76
77.
77
78.
78
79.
Lock、ReadWriteLock與Condition 79
80.
Lock、ReadWriteLock與Condition ? 前面設計了執行緒安全的ArrayList,無法 兩個執行緒同時呼叫get()與size() ? 如果只是讀取操作,可允許執行緒同時並行 的話,那對讀取效率將會有所改善 80
81.
Lock、ReadWriteLock與Condition ? ReadWriteLock介面定義了讀取鎖定與寫 入鎖定行為,可以使用readLock()、 writeLock()方法傳回Lock實作物件 ? ReentrantReadWriteLock 是ReadWriteLock介面的主要實作類別 –
readLock()方法會傳回 ReentrantReadWriteLock.ReadLock實例 – writeLock()方法會傳回 ReentrantReadWriteLock.WriteLock實例 81
82.
Lock、ReadWriteLock與Condition ? ReentrantReadWriteLock.ReadLock實作了 Lock介面,呼叫其lock()方法時… – 若沒有任何ReentrantReadWriteLock.WriteLock 呼叫過lock()方法,也就是沒有任何寫入鎖定時,就可 以取得讀取鎖定 ?
ReentrantReadWriteLock.WriteLock實作了 Lock介面,呼叫其lock()方法時… – 若沒有任何ReentrantReadWriteLock.ReadLock或 ReentrantReadWriteLock.WriteLock呼叫過 lock()方法,也就是沒有任何讀取或寫入鎖定時,才可 以取得寫入鎖定。 82
83.
83
84.
84
85.
使用StampedLock ? ReadWriteLock在沒有任何讀取或寫入鎖定 時,才可以取得寫入鎖定,這可用於實現悲 觀讀取(Pessimistic Reading) ?
如果執行緒進行讀取時,經常可能有另一執 行緒有寫入需求,為了維持資料一致, ReadWriteLock的讀取鎖定就可派上用場 85
86.
使用StampedLock ? 如果讀取執行緒很多,寫入執行緒甚少的情 況下,使用ReadWriteLock可能會使得寫入 執行緒遭受飢餓(Starvation)問題 ? 寫入執行緒可能遲遲無法競爭到鎖定,而一 直處於等待狀態 86
87.
使用StampedLock ? JDK8新增了StampedLock類別,可支援樂觀 讀取(Optimistic Reading)實作 ?
若讀取執行緒很多,寫入執行緒甚少的情況 下,你可以樂觀地認為,寫入與讀取同時發 生的機會甚少,因此不悲觀地使用完全的讀 取鎖定 87
88.
88
89.
89
90.
Lock、ReadWriteLock與Condition ? Condition介面用來搭配Lock,最基本用 法就是達到Object的wait()、notify()、 notifyAll()方法之作用 … 90
91.
91
92.
92
93.
Lock、ReadWriteLock與Condition ? 一個Condition物件可代表有一個等待集合, 可以重複呼叫Lock的newCondition(), 取得多個Condition實例,這代表了可以有 多個等待集合… ? 如果可以有兩個等待集合,一個是給生產者 執行緒用,一個給消費者執行緒用,生產者 只通知消費者等待集合,消費者只通知生產 者等待集合,那會比較有效率
… 93
94.
94
95.
95
96.
使用Executor ? 從JDK5開始,定義了 java.util.concurrent.Executor介面, 目的在將Runnable的指定與實際如何執行 分離 96
97.
97
98.
98
99.
使用Executor ? 定義一個DirectExecutor,單純呼叫傳入 execute()方法的Runnable物件之run() 方法: 99
100.
使用Executor ? 如果定義ThreadPerTaskExecutor: 100
101.
使用Executor 101
102.
使用Executor ? 執行緒池這類服務定義在Executor子介面 java.util.concurrent.ExecutorService ? 通用的ExecutorService由抽象類別 AbstractExecutorService實作 –
如果需要執行緒池功能,可以使用子類別 java.util.concurrent.ThreadPoolExec utor 102
103.
使用Executor ? ThreadPoolExecutor擁有不同建構式可 供使用 ? java.util.concurrent.Executors的 newCachedThreadPool()、 newFixedThreadPool()靜態方法可建構 ThreadPoolExecutor實例 103
104.
使用Executor ? Executors.newCachedThreadPool()傳回的 ThreadPoolExecutor實例,會在必要時建立執 行緒 – 你的Runnable可能執行在新建的執行緒,或重複利用的 執行緒中 ?
newFixedThreadPool()可指定在池中建立固定 數量的執行緒 ? 這兩個方法也都有接受 java.util.concurrent.ThreadFactory的版 本,你可以在ThreadFactory的newThread()方 法中,實作如何建立Thread實例 104
105.
使用Executor ? 可使用ThreadPoolExecutor搭配先前的 Pages使用: 105
106.
使用Executor ? ExecutorService還定義了submit()、 invokeAll()、invokeAny()等方法 – 方法中出現了 java.util.concurrent.Future、 java.util.concurrent.Callable介面 106
107.
使用Executor 107
108.
使用Executor ? Future定義的行為讓你在將來取得結果 – 可以將想執行的工作交給Future,Future使用另一執 行緒來進行工作,你就可以先忙別的事去 –
過些時候,再呼叫Future的get()取得結果,如果結果 已經產生,get()會直接返回,否則會進入阻斷直到結 果傳回 – get()的另一版本則可以指定等待結果的時間,若指定 的時間到結果還沒產生,就會丟出 java.util.concurrent.TimeoutException – 以使用Future的isDone()方法,看看結果是否產生 108
109.
使用Executor ? Future經常與Callable搭配使用 ? Callable的作用與Runnable類似,可讓 你定義想要執行的流程 ?
Runnable的run()方法無法傳回值,也無 法拋出受檢例外,然而Callable的call() 方法可以傳回值,也可以拋出受檢例外 109
110.
使用Executor ? java.util.concurrent.FutureTask 是Future的實作類別,建構時可傳入 Callable實作物件指定的執行的內容 110
111.
使用Executor ? ExecutorService的submit()方法,它 可以接受Callable物件,呼叫後傳回的 Future物件,就是讓你在稍後可以取得運算 結果 111
112.
使用Executor ? ScheduledExecutorService為 ExecutorService的子介面,可以讓你進 行工作排程 – schedule()方法用來排定Runnable或 Callable實例延遲多久後執行一次,並傳回 Future子介面ScheduledFuture的實例 –
對於重複性的執行,可使用 scheduleWithFixedDelay()與 scheduleAtFixedRate()方法 112
113.
使用Executor ? 在一個執行緒只排定一個Runnable實例的情況下 – scheduleWithFixedDelay()方法可排定延遲多久首 次執行Runnable,執行完Runnable會排定延遲多久後 再度執行 –
scheduleAtFixedRate()可指定延遲多久首次執行 Runnable,同時依指定週期排定每次執行Runnable的 時間 – 不管是scheduleWithFixedDelay()與 scheduleAtFixedRate(),上次排定的工作拋出例外, 不會影響下次排程的進行 113
114.
使用Executor ? ScheduledExecutorService的實作類別 ScheduledTreadPoolExecutor為 ThreadPoolExecutor的子類別,具有執行緒池 與排程功能。 – 可以使用Executors的newScheduledThreadPool() 方法指定傳回內建多少個執行緒的 ScheduledTreadPoolExecutor –
使用newSingleThreadScheduledExecutor()則可 使用單一執行緒執行排定的工作 114
115.
使用Executor 115
116.
使用Executor ? Future的另一實作類別 java.util.concurrent.ForkJoinTask及 其子類別,與ExecutorService的實作類 別java.util.concurrent.ForkJoinPool 有關 – 都是JDK7中新增的API,主要目的是在解決分而 治之(Divide
and conquer)的問題 116
117.
使用ForkJoinPool 117
118.
使用ForkJoinPool ? ForkJoinTask子類別RecursiveTask, 用於執行後會傳回結果的時候 ? 使用時必須繼承它,並實作compute()方法 118
119.
119
120.
簡介並行Collection ? 使用第9章介紹過的List實作,由於它們都 非執行緒安全類別,為了要在使用迭代器時, 不受另一執行緒寫入操作的影響,你必須作 類似以下的動作: 120
121.
簡介並行Collection ? 使用Collections.synchronizedList() 並非就不用如此操作: 121
122.
簡介並行Collection ? CopyOnWriteArrayList實作了List介面 – 在寫入操作時(例如add()、set()等),內部會建立 新陣列,並複製原有陣列索引的參考,然後在新陣列上 進行寫入操作,寫入完成後,再將內部原參考舊陣列的 變數參考至新陣列 –
對寫入而言,這是個很耗資源的設計 – 使用迭代器時,寫入不影響迭代器已參考的物件 – 對於一個鮮少進行寫入操作,而使用迭代器頻繁的情境 下,可使用CopyOnWriteArrayList提高迭代器效率 122
123.
簡介並行Collection ? CopyOnWriteArraySet實作了Set介面 – 內部使用CopyOnWriteArrayList來完成Set 的各種操作,因此一些特性與 CopyOnWriteArrayList是相同的 123
124.
簡介並行Collection ? BlockingQueue是Queue的子介面 – 執行緒若呼叫put()方法,在佇列已滿的情況下 會被阻斷 –
執行緒若呼叫take()方法,在佇列為空的情況 下會被阻斷 124
125.
125
126.
126
127.
簡介並行Collection 127
128.
簡介並行Collection ? ConcurrentMap是Map的子介面,其定義 了putIfAbsent()、remove()與 replace()等方法,這些方法都是原子 (Atomic)操作 128
129.
簡介並行Collection ? putIfAbsent()相當於自行於 synchronized中進行以下動作: 129
130.
簡介並行Collection ? remove()相當於自行於synchronized中 進行以下動作: 130
131.
簡介並行Collection ? replace()有兩個版本,其一相當於自行於 synchronized中進行以下動作: 131
132.
簡介並行Collection ? replace()另外一個版本相當於你自行於 synchronized中進行以下動作: 132
133.
簡介並行Collection ? ConcurrentHashMap是ConcurrentMap 的實作類別 ? ConcurrentNavigableMap是 ConcurrentMap子介面,其實作類別為 ConcurrentSkipListMap,可視為支援 並行操作的TreeMap版本 133