Welcome to Yumao′s Blog.
Hello JavaSE2 Day04
, 2012年03月22日 , Java Language , 评论 在〈Hello JavaSE2 Day04〉中留言功能已關閉 ,

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 計時結束清除計時任務

Code Package

课堂提纲教案

评论已关闭