Java-gt;Android并发编程筑基篇
最近有點忙,又有其他的事情,所以一直沒有開始寫這篇,感覺很慚愧。
上一章講了太多的東西,其實每一個小細節都可以寫成一長篇,這一章會盡量用精簡的方式把坑填上。
Java的線程狀態
想要學好并發,還是得知道線程的生命周期,先看一下線程的生命周期:
在線程的運行周期中會有狀態與鎖有關,所以先要講解線程的狀態,才能繼續講鎖。
sleep
sleep會讓當前線程進入”睡眠”狀態,把執行的機會讓給其他線程。
類似于迅雷下載,當前正在下載N部片子,可同時執行任務數為M(M<N),暫停當前任務后,正在等待的任務才有機會提前運行,否則只有當前任務結束后,才會開始。
但是,sleep不會釋放鎖,如果有同步塊、鎖之類的,sleep后,別的線程仍然不能訪問已經被鎖住的數據。
wait、notify、notifyAll
在使用wait和notify的時候需要用synchronized鎖住對象,以此來保證線程安全。
使用wait后,會暫時地將鎖釋放,使當前線程處于等待狀態,從而使別的線程可以訪問到資源,喚醒(notify)或者使用了wait(long)線程蘇醒后就會重新占用鎖,如果使用了interrupte去中斷wait,就會拋出InterruptedException。
需要注意的是,wait、notify、notifyAll,都是屬于Object類中的方法,而不是屬于Thread,這意味著使用對象的方法,會影響到訪問此對象的線程的狀態,所以前面提到需要用synchronized保證線程。
yield
Causes the calling Thread to yield execution time to another Thread that
is ready to run. The actual scheduling is implementation-dependent.
這是官方的注釋,調用Thread.yield()方法,只是讓線程進入準備運行狀態,把CPU資源讓給別的線程提前運行。
join
Thread.join()
看字面意思像是合并,其實從效果上來看更像”插隊”,b.join,那么a必須等b執行完才能繼續往下執行。
Java中的鎖
Java中經常用到的鎖有:
- synchronized
- Lock
總結
以上是生活随笔為你收集整理的Java-gt;Android并发编程筑基篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java-gt;Android并发编程引
- 下一篇: 以太坊交易生命周期