狠狠撸

狠狠撸Share a Scribd company logo
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
CHAPTER 11
? 执行绪与并行础笔滨
              學習目標
              ? 認識Thread與
                Runnable
              ? 使用synchronized
              ? 使用wait()、
                notify()、
                notifyAll()
              ? 運用高階並行API
簡介執行緒
? 如果要設計一個龜兔賽跑遊戲,賽程長度為
  10步,每經過一秒,烏龜會前進一步,免子
  則可能前進兩步或睡覺,那該怎麼設計呢?
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
簡介執行緒
? 如果可以撰寫程式再啟動兩個流程,一個是
  烏龜流程,一個免子流程,程式邏輯會比較
  清楚 …
? 如果想在main()以外獨立設計流程,可以撰
  寫類別實作java.lang.Runnable介面,
  流程的進入點是實作在run()方法中 …
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
簡介執行緒
? 可以建構Thread實例來執行Runnable實例
  定义的谤耻苍()方法
罢丑谤别补诲与搁耻苍苍补产濒别
? JVM是台虛擬電腦,只安裝一顆稱為主執行
  緒的CPU,可執行main()定義的執行流程
? 如果想要為JVM加裝CPU,就是建構Thread
  實例,要啟動額外CPU就是呼叫Thread實例
  的start()方法
? 額外CPU執行流程的進入點,可以定義在
  Runnable介面的run()方法中
罢丑谤别补诲与搁耻苍苍补产濒别
? 除了將流程定義在Runnable的run()方法
  中之外,另一個撰寫多執行緒程式的方式,
  是繼承Thread類別,重新定義run()方法
罢丑谤别补诲与搁耻苍苍补产濒别
罢丑谤别补诲与搁耻苍苍补产濒别
? Thread類別本身也實作了Runnable介面,
  而谤耻苍()方法的实作如下:
罢丑谤别补诲与搁耻苍苍补产濒别
? 實作Runnable於run()中定義額外流程好?
  還是繼承Thread於run()中定義額外流程
  好?
 – 實作Runnable介面的好處就是較有彈性,你的
   類別還有機會繼承其它類別
 – 若繼承了Thread,那該類別就是一種Thread,
   通常是為了直接利用Thread中定義的一些方法,
   才會繼承Thread來實作
执行绪生命周期
? 如果主執行緒中啟動了額外執行緒,預設會
  等待被啟動的所有執行緒都執行完run()方
  法才中止JVM
? 如果一個Thread被標示為Daemon執行緒,
  在所有的非Daemon執行緒都結束時,JVM自
  動就會終止
执行绪生命周期
执行绪生命周期
执行绪生命周期
? 執行緒有其優先權,可使用Thread的
  setPriority()方法設定優先權
 – 可設定值為1(Thread.MIN_PRIORITY)到10
   (Thread.MAX_PRIORITY),預設是5
   (Thread.NORM_PRIORITY)
 – 超出1到10外的設定值會拋出
   IllegalArgumentException
? 數字越大優先權越高,排班器越優先排入CPU,如
  果優先權相同,則輸流執行(Round-robin)
执行绪生命周期
? 有幾種狀況會讓執行緒進入Blocked狀態
 –   呼叫Thread.sleep()方法
 –   進入synchronized前競爭物件鎖定的阻斷
 –   呼叫wait()的阻斷
 –   等待輸入輸出完成
? 當某執行緒進入Blocked時,讓另一執行緒排
  入CPU執行(成為Running狀態),避免CPU
  空閒下來,經常是改進效能的方式之一
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
执行绪生命周期
? 執行緒因輸入輸出進入Blocked狀態後,在完
  成輸入輸出後,會回到Runnable狀態,等待
  排班器排入執行(Running狀態)
? 一個進入Blocked狀態的執行緒,可以由另一
  個執行緒呼叫該執行緒的interrupt()方
  法,讓它離開Blocked狀態
执行绪生命周期
执行绪生命周期
? 如果A執行緒正在運行,流程中允許B執行緒
  加入,等到B執行緒執行完畢後再繼續A執行
  緒流程,則可以使用join()方法完成需求
? 當執行緒使用join()加入至另一執行緒時,
  另一執行緒會等待被加入的執行緒工作完畢,
  然後再繼續它的動作
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
执行绪生命周期
? 有時候加入的執行緒可能處理太久,你不想
  無止境等待這個執行緒工作完畢,則可以在
  join()時指定時間
? 執行緒完成run()方法後,就會進入Dead
? 進入Dead(或已經呼叫過start()方法)的
  執行緒不可以再度呼叫start()方法,否則
  會拋出IllegalThreadStateException
执行绪生命周期
? Thread類別上定義有stop()方法,不過被
  标示為顿别辫谤别肠补迟别诲
执行绪生命周期
? 使用了被标示為顿别辫谤别肠补迟别诲的API,編譯器會提出警
  告,而在IDE中,通常會出現刪除線表示不建議使
  用


? 直接呼叫Thread的stop()方法,將不理會你所設
  定的釋放、取得鎖定流程,執行緒會直接釋放所有
  已鎖定物件,有可能使物件陷入無法預期狀態
? 除了stop()方法外,Thread的resume()、
  suspend()、destroy()等方法也不建議再使用
执行绪生命周期
? 要停止執行緒,最好自行實作,讓執行緒跑
  完應有的流程,而非呼叫Thread的stop()
  方法
执行绪生命周期
? 不僅有停止執行緒必須自行根據條件實作,
  執行緒的暫停、重啟,也必須視需求實作,
  而不是直接呼叫suspend()、resume()等
  方法
关於罢丑谤别补诲骋谤辞耻辫
? 每個執行緒都屬於某個執行緒群組
? 可以使用以下程式片段取得目前執行緒所屬
  执行绪群组名称:
关於罢丑谤别补诲骋谤辞耻辫
? 每個執行緒產生時,都會歸入某個執行緒群
  組,這視執行緒是在哪個群組中產生
? 如果沒有指定,則歸入產生該子執行緒的執
  行緒群組
? 可以自行指定執行緒群組,執行緒一但歸入
  某個群組,就無法更換群組
关於罢丑谤别补诲骋谤辞耻辫
? java.lang.ThreadGroup類別可以管理
  群組中的執行緒,可以使用以下方式產生群
  組,並在產生執行緒時指定所屬群組:
关於罢丑谤别补诲骋谤辞耻辫
? ThreadGroup的某些方法,可以對群組中
  所有執行緒產生作用
 – 例如interrupt()方法可以中斷群組中所有執
   行緒,setMaxPriority()方法可以設定群組
   中所有執行緒最大優先權(本來就擁有更高優先
   權的執行緒不受影響)
关於罢丑谤别补诲骋谤辞耻辫
? 想要一次取得群組中所有執行緒,可以使用
  别苍耻尘别谤补迟别()方法
关於罢丑谤别补诲骋谤辞耻辫
? ThreadGroup中有個uncaughtException()方
  法,群組中某個執行緒發生例外而未捕捉時,JVM
  會呼叫此方法進行處理
  – 如果ThreadGroup有父ThreadGroup,就會呼叫父
    ThreadGroup的uncaughtException()方法
  – 否則看看例外是否為ThreadDeath實例,若是什麼都不
    作,若否則呼叫例外的printStrackTrace()
? 如果必要定義ThreadGroup中執行緒的例外处理
  行為,可以重新定義此方法
关於罢丑谤别补诲骋谤辞耻辫
关於罢丑谤别补诲骋谤辞耻辫
? 在JDK5之後,如果ThreadGroup中的執行緒發生
  例外時 …
 – 如果ThreadGroup有父ThreadGroup,就會呼叫父
   ThreadGroup的uncaughtException()方法
 – 否則,看看Thread是否使用
   setUncaughtExceptionHandler()方法設定
   Thread.UncaughtExceptionHandler實例,有的話
   就會呼叫其uncaughtException()方法
 – 否則,看看例外是否為ThreadDeath實例,若「是」什
   麼都不作,若「否」則呼叫例外的
   printStrackTrace()
关於罢丑谤别补诲骋谤辞耻辫
? 對於執行緒本身未捕捉的例外,可以自行指
  定處理方式了 …
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 還記得6.2.5曾經開發過一個ArrayList類別
  吗?
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 如果你嘗試執行程式,「有可能」會發生
  ArrayIndexOutOfBoundsException例
  外…
? 執行緒存取同一物件相同資源時所引發的競
  速情況(Race condition) …
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 可以在add()方法上加上synchronized關
  键字
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 每個物件都會有個內部鎖定(IntrinsicLock),
  或稱為監控鎖定(Monitor lock)
? 被標示為synchronized的區塊將會被監控,任
  何執行緒要執行synchronized區塊都必須先取
  得指定的物件鎖定
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? synchronized不只可宣告在方法上,也可
  以陈述句方式使用
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 對於本身設計時沒有考慮競速問題的API來說,
  也可以如下撰写:
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 第9章介紹過的Collection與Map,都未考慮執行
  緒安全
? 可以使用Collections的…
 –   synchronizedCollection()
 –   synchronizedList()
 –   synchronizedSet()
 –   synchronizedMap()
? 這些方法會將傳入的Collection、List、Set、
  Map實作物件包裹,傳回具執行緒安全的物件
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 如果你經常如下進行List操作:
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 使用synchronized陳述句,可以作到更細
  部控制,例如提供不同物件作為锁定来源…
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? Java的synchronized提供的是可重入同步(Reentrant
  Synchronization)
  – 執行緒取得某物件鎖定後,若執行過程中又要執行
    synchronized時,嘗試取得鎖定的物件來源又是同一
    個,則可以直接執行
? 由於執行緒無法取得鎖定時會造成阻斷,不正確地
  使用synchronized有可能造成…
  – 效能低落
  – 死結(Dead lock)
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? synchronized要求達到的所標示區塊的互
  斥性(Mutual exclusion)與可見性
  (Visibility)
 – 互斥性是指synchronized區塊同時間只能有一
   個執行緒
 – 可見性是指執行緒離開synchronized區塊後,
   另一執行緒接觸到的就是上一執行緒改變後的物
   件狀態
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 在Java中對於可見性的要求,可以使用
  惫辞濒补迟颈濒别达到变数范围
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 可以在變數上宣告volatile,表示變數是
  不穩定、易變的
 – 也就是可能在多執行緒下存取,這保證變數的可
   見性,也就是若有執行緒變動了變數值,另一執
   行緒一定可看到變更
? 被標示為volatile的變數,不允許執行緒
  快取,變數值的存取一定是在共享記憶體中
  進行
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? volatile保證的是單一變數的可見性,
 – 執行緒對變數的存取一定是在共享記憶體中,不
   會在自己的記憶體空間中快取變數,執行緒對共
   享記憶體中變數的存取,另一執行緒一定看得到
蝉测苍肠丑谤辞苍颈锄别诲与惫辞濒补迟颈濒别
? 以下是個正確使用volatile的例子:
等待与通知
? wait()、notify()與notifyAll()是Object
  定義的方法
  – 可以透過這三個方法控制執行緒釋放物件的鎖定,或者
    通知執行緒參與鎖定競爭
? 執行synchronized範圍的程式碼期間,若呼叫鎖
  定物件的wait()方法,執行緒會釋放物件鎖定,
  並進入物件等待集合(Wait set)而處於阻斷狀
  態
? 其它執行緒可以競爭物件鎖定,取得鎖定的執行緒
  可以執行synchronized範圍的程式碼
等待与通知
? 放在等待集合的執行緒不會參與CPU排班
? wait()可以指定等待時間,時間到之後執行
  緒會再度加入排班
 – 如果指定時間0或不指定,則執行緒會持續等待,
   直到被中斷(呼叫interrupt())或是告知
   (notify())可以參與排班
等待与通知
? 被競爭鎖定的物件之notify()呼叫時,會
  從物件等待集隨機通知一個執行緒加入排班
 – 再度執行synchronized前,被通知的執行緒會
   與其它執行緒共同競爭物件鎖定
? 如果呼叫notifyAll(),所有等待集中的
  執行緒都會被通知參與排班,這些執行緒會
  與其它執行緒共同競爭物件鎖定
等待与通知
等待与通知
? 生產者與消費者 …
等待与通知
等待与通知
等待与通知
等待与通知
? 使用以下的程式來示範Producer、
  颁辞苍蝉耻尘别谤与颁濒别谤办:
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
? java.util.concurrent.locks套件中
  提供Lock、ReadWriteLock、
  Condition介面以及相關實作類別
 – 可以提供類似synchronized、wait()、
   notify()、notifyAll()的作用,以及更多
   高階功能
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
? Lock介面還定義了tryLock()方法,如果
  執行緒呼叫tryLock()可以取得鎖定會傳回
  true,若無法取得鎖定傳回false
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
? 前面設計了執行緒安全的ArrayList,無法
  兩個執行緒同時呼叫get()與size()
? 如果只是讀取操作,可允許執行緒同時並行
  的話,那對讀取效率將會有所改善
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
? ReadWriteLock介面定義了讀取鎖定與寫
  入鎖定行為,可以使用readLock()、
  writeLock()方法傳回Lock實作物件
? ReentrantReadWriteLock
  是ReadWriteLock介面的主要實作類別
 – readLock()方法會傳回
   ReentrantReadWriteLock.ReadLock實例
 – writeLock()方法會傳回
   ReentrantReadWriteLock.WriteLock實例
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
? ReentrantReadWriteLock.ReadLock實作了
  Lock介面,呼叫其lock()方法時…
  – 若沒有任何ReentrantReadWriteLock.WriteLock
    呼叫過lock()方法,也就是沒有任何寫入鎖定時,就可
    以取得讀取鎖定
? ReentrantReadWriteLock.WriteLock實作了
  Lock介面,呼叫其lock()方法時…
  – 若沒有任何ReentrantReadWriteLock.ReadLock或
    ReentrantReadWriteLock.WriteLock呼叫過
    lock()方法,也就是沒有任何讀取或寫入鎖定時,才可
    以取得寫入鎖定。
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
? Condition介面用來搭配Lock,最基本用
  法就是達到Object的wait()、notify()、
  notifyAll()方法之作用 …
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
尝辞肠办、搁别补诲奥谤颈迟别尝辞肠办与颁辞苍诲颈迟颈辞苍
? 一個Condition物件可代表有一個等待集合,
  可以重複呼叫Lock的newCondition(),
  取得多個Condition實例,這代表了可以有
  多個等待集合…
? 如果可以有兩個等待集合,一個是給生產者
  執行緒用,一個給消費者執行緒用,生產者
  只通知消費者等待集合,消費者只通知生產
  者等待集合,那會比較有效率 …
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
使用贰虫别肠耻迟辞谤
? 從JDK5開始,定義了
  java.util.concurrent.Executor介面,
  目的在將Runnable的指定與實際如何執行
  分離
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
使用贰虫别肠耻迟辞谤
? 定義一個DirectExecutor,單純呼叫傳入
  execute()方法的Runnable物件之run()
  方法:
使用贰虫别肠耻迟辞谤
? 如果定義ThreadPerTaskExecutor:
使用贰虫别肠耻迟辞谤
使用贰虫别肠耻迟辞谤
? 執行緒池這類服務定義在Executor子介面
 java.util.concurrent.ExecutorService
? 通用的ExecutorService由抽象類別
  AbstractExecutorService實作
 – 如果需要執行緒池功能,可以使用子類別
   java.util.concurrent.ThreadPoolExec
   utor
使用贰虫别肠耻迟辞谤
? ThreadPoolExecutor擁有不同建構式可
  供使用
? java.util.concurrent.Executors的
  newCachedThreadPool()、
  newFixedThreadPool()靜態方法可建構
  ThreadPoolExecutor實例
使用贰虫别肠耻迟辞谤
? Executors.newCachedThreadPool()傳回的
  ThreadPoolExecutor實例,會在必要時建立執
  行緒
  – 你的Runnable可能執行在新建的執行緒,或重複利用的
    執行緒中
? newFixedThreadPool()可指定在池中建立固定
  數量的執行緒
? 這兩個方法也都有接受
  java.util.concurrent.ThreadFactory的版
  本,你可以在ThreadFactory的newThread()方
  法中,實作如何建立Thread實例
使用贰虫别肠耻迟辞谤
? 可使用ThreadPoolExecutor搭配先前的
  笔补驳别蝉使用:
使用贰虫别肠耻迟辞谤
? ExecutorService還定義了submit()、
  invokeAll()、invokeAny()等方法
 – 方法中出現了
   java.util.concurrent.Future、
   java.util.concurrent.Callable介面
使用贰虫别肠耻迟辞谤
使用贰虫别肠耻迟辞谤
? Future定義的行為讓你在將來取得結果
 – 可以將想執行的工作交給Future,Future使用另一執
   行緒來進行工作,你就可以先忙別的事去
 – 過些時候,再呼叫Future的get()取得結果,如果結果
   已經產生,get()會直接返回,否則會進入阻斷直到結
   果傳回
 – get()的另一版本則可以指定等待結果的時間,若指定
   的時間到結果還沒產生,就會丟出
   java.util.concurrent.TimeoutException
 – 以使用Future的isDone()方法,看看結果是否產生
使用贰虫别肠耻迟辞谤
? Future經常與Callable搭配使用
? Callable的作用與Runnable類似,可讓
  你定義想要執行的流程
? Runnable的run()方法無法傳回值,也無
  法拋出受檢例外,然而Callable的call()
  方法可以傳回值,也可以拋出受檢例外
使用贰虫别肠耻迟辞谤
? java.util.concurrent.FutureTask
  是Future的實作類別,建構時可傳入
  Callable實作物件指定的執行的內容
使用贰虫别肠耻迟辞谤
? ExecutorService的submit()方法,它
  可以接受Callable物件,呼叫後傳回的
  Future物件,就是讓你在稍後可以取得運算
  結果
使用贰虫别肠耻迟辞谤
? ScheduledExecutorService為
  ExecutorService的子介面,可以讓你進
  行工作排程
 – schedule()方法用來排定Runnable或
   Callable實例延遲多久後執行一次,並傳回
   Future子介面ScheduledFuture的實例
 – 對於重複性的執行,可使用
   scheduleWithFixedDelay()與
   scheduleAtFixedRate()方法
使用贰虫别肠耻迟辞谤
? 在一個執行緒只排定一個Runnable實例的情況下
 – scheduleWithFixedDelay()方法可排定延遲多久首
   次執行Runnable,執行完Runnable會排定延遲多久後
   再度執行
 – scheduleAtFixedRate()可指定延遲多久首次執行
   Runnable,同時依指定週期排定每次執行Runnable的
   時間
 – 不管是scheduleWithFixedDelay()與
   scheduleAtFixedRate(),上次排定的工作拋出例外,
   不會影響下次排程的進行
使用贰虫别肠耻迟辞谤
? ScheduledExecutorService的實作類別
  ScheduledTreadPoolExecutor為
  ThreadPoolExecutor的子類別,具有執行緒池
  與排程功能。
 – 可以使用贰虫别肠耻迟辞谤s的newScheduledThreadPool()
   方法指定傳回內建多少個執行緒的
   ScheduledTreadPoolExecutor
 – 使用newSingleThreadScheduledExecutor()則可
   使用單一執行緒執行排定的工作
使用贰虫别肠耻迟辞谤
使用贰虫别肠耻迟辞谤
? Future的另一實作類別
 java.util.concurrent.ForkJoinTask及
 其子類別,與ExecutorService的實作類
 別java.util.concurrent.ForkJoinPool
 有關
 – 都是JDK7中新增的API,主要目的是在解決分而
   治之(Divide and conquer)的問題
使用贰虫别肠耻迟辞谤
使用贰虫别肠耻迟辞谤
? ForkJoinTask子類別RecursiveTask,
  用於執行後會傳回結果的時候
? 使用時必須繼承它,並實作compute()方法
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
使用贰虫别肠耻迟辞谤
? 如果分而治之的過程中,子任務不需傳回值,
  可以繼承RecursiveAction並實作
  compute()方法
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
介绍并行颁辞濒濒别肠迟颈辞苍
? 使用第9章介紹過的List實作,由於它們都
  非執行緒安全類別,為了要在使用迭代器時,
  不受另一執行緒寫入操作的影響,你必須作
  類似以下的動作:
介绍并行颁辞濒濒别肠迟颈辞苍
? 使用Collections.synchronizedList()
  并非就不用如此操作:
介绍并行颁辞濒濒别肠迟颈辞苍
? CopyOnWriteArrayList實作了List介面
 – 在寫入操作時(例如add()、set()等),內部會建立
   新陣列,並複製原有陣列索引的參考,然後在新陣列上
   進行寫入操作,寫入完成後,再將內部原參考舊陣列的
   變數參考至新陣列
 – 對寫入而言,這是個很耗資源的設計
 – 使用迭代器時,寫入不影響迭代器已參考的物件
 – 對於一個鮮少進行寫入操作,而使用迭代器頻繁的情境
   下,可使用CopyOnWriteArrayList提高迭代器效率
介绍并行颁辞濒濒别肠迟颈辞苍
? CopyOnWriteArraySet實作了Set介面
 – 內部使用CopyOnWriteArrayList來完成Set
   的各種操作,因此一些特性與
   CopyOnWriteArrayList是相同的
介绍并行颁辞濒濒别肠迟颈辞苍
? BlockingQueue是Queue的子介面
 – 執行緒若呼叫put()方法,在佇列已滿的情況下
   會被阻斷
 – 執行緒若呼叫take()方法,在佇列為空的情況
   下會被阻斷
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨
介绍并行颁辞濒濒别肠迟颈辞苍
介绍并行颁辞濒濒别肠迟颈辞苍
? ConcurrentMap是Map的子介面,其定義
  了putIfAbsent()、remove()與
  replace()等方法,這些方法都是原子
  (Atomic)操作
介绍并行颁辞濒濒别肠迟颈辞苍
? putIfAbsent()相當於自行於
  蝉测苍肠丑谤辞苍颈锄别诲中进行以下动作:
介绍并行颁辞濒濒别肠迟颈辞苍
? remove()相當於自行於synchronized中
  进行以下动作:
介绍并行颁辞濒濒别肠迟颈辞苍
? replace()有兩個版本,其一相當於自行於
  蝉测苍肠丑谤辞苍颈锄别诲中进行以下动作:
介绍并行颁辞濒濒别肠迟颈辞苍
? replace()另外一個版本相當於你自行於
  蝉测苍肠丑谤辞苍颈锄别诲中进行以下动作:
介绍并行颁辞濒濒别肠迟颈辞苍
? ConcurrentHashMap是ConcurrentMap
  的實作類別
? ConcurrentNavigableMap是
  ConcurrentMap子介面,其實作類別為
  ConcurrentSkipListMap,可視為支援
  並行操作的TreeMap版本

More Related Content

What's hot (20)

Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
?
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
?
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
?
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
?
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
?
资料永续与交换
资料永续与交换资料永续与交换
资料永续与交换
Justin Lin
?
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
?
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
?
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
?
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Justin Lin
?
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
?
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
ted-xu
?
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
颁贬16:整合资料库
颁贬16:整合资料库颁贬16:整合资料库
颁贬16:整合资料库
Justin Lin
?
颁贬10:输入输出
颁贬10:输入输出颁贬10:输入输出
颁贬10:输入输出
Justin Lin
?
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
?
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
?
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
?
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
?
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
?
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
?
资料永续与交换
资料永续与交换资料永续与交换
资料永续与交换
Justin Lin
?
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
?
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
?
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
?
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Justin Lin
?
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
?
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
?
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
?
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
ted-xu
?
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
Justin Lin
?
颁贬16:整合资料库
颁贬16:整合资料库颁贬16:整合资料库
颁贬16:整合资料库
Justin Lin
?
颁贬10:输入输出
颁贬10:输入输出颁贬10:输入输出
颁贬10:输入输出
Justin Lin
?
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
?

Viewers also liked (14)

Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
?
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Justin Lin
?
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Justin Lin
?
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
Justin Lin
?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Justin Lin
?
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Justin Lin
?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Justin Lin
?
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Justin Lin
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Joda-Time & JSR 310  –  Problems, Concepts and ApproachesJoda-Time & JSR 310  –  Problems, Concepts and Approaches
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Justin Lin
?
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDEJava SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Justin Lin
?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
JDK8 Functional API
JDK8 Functional APIJDK8 Functional API
JDK8 Functional API
Justin Lin
?
PyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 TutorialPyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 Tutorial
Justin Lin
?
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
?
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理Java SE 7 技術手冊投影片第 08 章 - 例外处理
Java SE 7 技術手冊投影片第 08 章 - 例外处理
Justin Lin
?
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Justin Lin
?
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
Justin Lin
?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Justin Lin
?
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?Java SE 7 技術手冊第七章草稿 - 何謂介面?
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Justin Lin
?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Justin Lin
?
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Justin Lin
?
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
?
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Joda-Time & JSR 310  –  Problems, Concepts and ApproachesJoda-Time & JSR 310  –  Problems, Concepts and Approaches
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Justin Lin
?
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDEJava SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Justin Lin
?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
JDK8 Functional API
JDK8 Functional APIJDK8 Functional API
JDK8 Functional API
Justin Lin
?
PyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 TutorialPyCon Taiwan 2013 Tutorial
PyCon Taiwan 2013 Tutorial
Justin Lin
?

Similar to Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨 (20)

Multithread
MultithreadMultithread
Multithread
Medivh2011
?
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
执行绪与并行础笔滨
执行绪与并行础笔滨执行绪与并行础笔滨
执行绪与并行础笔滨
Justin Lin
?
线程与并发
线程与并发线程与并发
线程与并发
Tony Deng
?
闯补惫补程序员也需要了解颁笔鲍
闯补惫补程序员也需要了解颁笔鲍闯补惫补程序员也需要了解颁笔鲍
闯补惫补程序员也需要了解颁笔鲍
Min Zhou
?
Java cpu
Java cpuJava cpu
Java cpu
ykdsg
?
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcip
Dai Jun
?
并行与平行
并行与平行并行与平行
并行与平行
Justin Lin
?
Chapter2
Chapter2  Chapter2
Chapter2
Fang-Ling Lin
?
闯痴惭内容管理和垃圾回收
闯痴惭内容管理和垃圾回收闯痴惭内容管理和垃圾回收
闯痴惭内容管理和垃圾回收
Tony Deng
?
最新闯补惫补技术内存模型
最新闯补惫补技术内存模型最新闯补惫补技术内存模型
最新闯补惫补技术内存模型
yiditushe
?
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
?
例外处理
例外处理例外处理
例外处理
Justin Lin
?
高效能执行绪
高效能执行绪高效能执行绪
高效能执行绪
Rick Wu
?
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
Ho Kim
?
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHP
Jace Ju
?
2014暑期訓練之Linux kernel power
2014暑期訓練之Linux kernel power2014暑期訓練之Linux kernel power
2014暑期訓練之Linux kernel power
冠宇 陳
?
闯补惫补面试知识
闯补惫补面试知识闯补惫补面试知识
闯补惫补面试知识
yiditushe
?
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
jinqing zhu
?
颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨颁贬11:执行绪与并行础笔滨
颁贬11:执行绪与并行础笔滨
Justin Lin
?
执行绪与并行础笔滨
执行绪与并行础笔滨执行绪与并行础笔滨
执行绪与并行础笔滨
Justin Lin
?
线程与并发
线程与并发线程与并发
线程与并发
Tony Deng
?
闯补惫补程序员也需要了解颁笔鲍
闯补惫补程序员也需要了解颁笔鲍闯补惫补程序员也需要了解颁笔鲍
闯补惫补程序员也需要了解颁笔鲍
Min Zhou
?
Java cpu
Java cpuJava cpu
Java cpu
ykdsg
?
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcip
Dai Jun
?
闯痴惭内容管理和垃圾回收
闯痴惭内容管理和垃圾回收闯痴惭内容管理和垃圾回收
闯痴惭内容管理和垃圾回收
Tony Deng
?
最新闯补惫补技术内存模型
最新闯补惫补技术内存模型最新闯补惫补技术内存模型
最新闯补惫补技术内存模型
yiditushe
?
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok
?
高效能执行绪
高效能执行绪高效能执行绪
高效能执行绪
Rick Wu
?
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
Ho Kim
?
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHP
Jace Ju
?
2014暑期訓練之Linux kernel power
2014暑期訓練之Linux kernel power2014暑期訓練之Linux kernel power
2014暑期訓練之Linux kernel power
冠宇 陳
?
闯补惫补面试知识
闯补惫补面试知识闯补惫补面试知识
闯补惫补面试知识
yiditushe
?
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
jinqing zhu
?

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
?
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin
?
Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
?
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
?
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
?
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
?
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
?
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
?
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
?
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
?
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin
?
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin
?
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
?
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
?
13.并行、平行与非同步
13.并行、平行与非同步13.并行、平行与非同步
13.并行、平行与非同步
Justin Lin
?
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
?
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin
?
10. 资料永续与交换
10. 资料永续与交换10. 资料永续与交换
10. 资料永续与交换
Justin Lin
?

Java SE 7 技術手冊投影片第 11 章 - 执行绪与并行础笔滨