Welcome to Yumao′s Blog.
Java SE2 Day04
====================
2 Sleep 的打斷喚醒
1) Thread.sleep(times) 使當前線程從 Running 放棄處理器
進入Block狀態, 休眠times毫秒, 再返回到Runnable
2)一個線程可以提前喚醒另外一個sleep Block的線程
interrupt() 打斷/中斷
3) 被喚醒線程出現 中斷異常
13) 異步 與 同步
1) 異步: 並發, 各干自己的: 如: 一群人上卡車
2) 同步: 步調一致的處理, 如: 一群人上公交車, "倫敦制"
14) 案例異步寫文件
1) 一個線程負責將控制台信息讀取到內存緩衝區(集合)
如果控制台輸入quit 將結束輸入. 中斷寫出線程
2) 一個線程負責將緩衝區中的信息寫到硬盤文件
每次檢查緩衝區是否有數據, 如果有就寫出, 直到空為止
如果沒有數據就休眠5秒
寫出線程是後台線程, 可以自動結束
3) 緩衝區採用隊列(FIFO)的工作方式
1.線性並發安全問題
1) 多個線程並發讀寫同一個臨界資源時候會發生"線程並發安全問題"
2) 常見的臨界資源:
多線程共享實例變量
靜態公共變量
3) 使用同步代碼塊解決線程並發安全問題
synchronized(同步監視器){
}
a 同步監視器 是一個任意對象實例. 是一個多個線程之間的互
斥的鎖機制. 多個線程要使用同一個"監視器"對象 實現同步互斥
b 常見寫法:
synchronized(this){
}
c 如果方法的全部過程需要同步, 可以簡單使用 synchronized
修飾方法. 相當於整個方法的 synchronized(this)
d 盡量減少同步範圍, 提高並發效率
2. Java中同步的API
1 StringBuffer 是同步的
synchronized append();
StringBuilder 不是同步的
append();
2 Vector 和 Hashtable 是同步的
ArrayList 和 HashMap 不是同步的
3 Collections.synchronizedList()
Collections.synchronizedMap()
ArrayList list = new ArrayList();
List syncList = Collections.synchronizedList(list);
1 Timer(定時器)使用(java.util.Timer)
1) 可以安排自動的計劃任務的類, 每個任務都是一個線程
2) 創建Timer 實例
3) 為Timer 實例增加計劃任務, 計劃任務是一個接口
4) 使用cancel() 清除timer對象上所有計劃任務.
任務: 1 倒計時每隔一秒顯示一下時間,
2 計時結束清除計時任務