一、Java多線程設計模式-SingleThreaded Execution

  1. SingleThreaded Execution
    一次只允許一個線程執行
  2. 擴展
    2.1 原子操作
    基本類型、引用類型的賦值和引用是原子操作
    long和double的賦值和引用是原子操作
    long或double在線程間共享時,需要將其放入synchronized中操作,或者聲明爲volatile
  3. sleep方法和interrupt方法
    線程調用sleep方法休眠時,可以調用Thread.interrept()方法中斷,此時調用Thread.interrput()方法隨時可以調用,不需要事先獲取鎖
  4. wait方法和interrupt方法
    調用Thrad.interrupt()方法意在告訴線程不用等待notify/notifyAll,直接從等待隊列中出來。注意:線程在進入等待隊列時,已經釋放了鎖。當正在wait的線程被調用interrupt方法時,該線程會在重新獲取鎖之後拋出InterruptedException異常。在獲取鎖之前,線程不會拋出InterruptedException異常。
  5. notify和interrput比較
    notify是java.lang.Object類方法,喚醒該實例等待隊列中的線程,而不是直接指定的線程。nofitfy/notifyAll喚醒的線程會繼續執行wait的下一條語句。執行notify/notifyAll時,線程必須要獲取實例的鎖。
    interrupt方法時java.lang.Thread類的靜態方法,可以直接指定線程並喚醒。當被interrupt的線程處於sleep或者wati中時,會拋出InterruptedException異常。執行interrupt(取消其他線程)時並不需要獲取要取消的線程的鎖。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章