程序和執行緒:
1)程序是靜態的,其實就是指開啟的乙個程式;而執行緒是動態的,是真正執行的單元,執行的過程。其實我們平時看到的程序,是執行緒在執行著,因為執行緒是作為程序的乙個單元存在的。
2)同樣作為基本的執行單元,執行緒是劃分得比程序更小的執行單位。
3)每個程序都有一段專用的記憶體區域。與此相反,執行緒卻共享記憶體單元(包括**和資料),通過共享的記憶體單元來實現資料交換、實時通訊與必要的同步操作。
1、建立執行緒的方式:
建立方式一:繼承thread
1:定義乙個類繼承thread
2:覆蓋thread中的run方法(將執行緒執行的**放入run方法中)。
3:直接建立thread的子類物件
4:呼叫start方法(內部呼叫了執行緒的任務(run方法));作用:啟動執行緒,呼叫run方法
方式二:實現runnable
1:定義類實現runnable介面
2:覆蓋runnable介面中的run方法,將執行緒的任務**封裝到run中
3:通過thread類建立執行緒物件
4、並將runnable介面的子類物件作為thread類的構造函式引數進行傳遞
作為引數傳遞的原因是讓執行緒物件明確要執行的run方法所屬的物件。
區別:
繼承方式:執行緒**放在thread子類的run方法中
實現方式:執行緒存放在介面的子類run方法中;避免了單繼承的侷限性,建議使用。
2、執行緒狀態:
新建:start()
臨時狀態:具備cpu的執行資格,但是無執行權
執行狀態:具備cpu的執行權,可執行
凍結狀態:通過sleep或者wait使執行緒不具備執行資格,需要notify喚醒,並處於臨時狀態。
消亡狀態:run方法結束或者中斷了執行緒,使得執行緒死亡。
3、多執行緒安全問題:
多個執行緒共享同一資料,當某一線程執行多條語句時,其他執行緒也執行進來,導致資料在某一語句上被多次修改,執行到下一語句時,導致錯誤資料的產生。
因素:多個執行緒操作共享資料;多條語句操作同一資料
解決:原理:某一時間只讓某一線程執行完操作共享資料的所有語句。
辦法:使用鎖機制:synchronized或lock物件
4、執行緒的同步:
當兩個或兩個以上的執行緒需要共享資源,他們需要某種方法來確定資源在某一刻僅被乙個執行緒占用,達到此目的的過程叫做同步(synchronization)。
同步**塊:synchronized(物件){},將需要同步的**放在大括號中,括號中的物件即為鎖。
同步函式:放於函式上,修飾符之後,返回型別之前。
5、wait和sleep的區別:(執行權和鎖區分)
wait:可指定等待的時間,不指定須由notify或notifyall喚醒。
執行緒會釋放執行權,且釋放鎖。
sleep:必須制定睡眠的時間,時間到了自動處於臨時(阻塞)狀態。
即使睡眠了,仍持有鎖,不會釋放執行權。
android下的程序與執行緒:
1、程序的生命週期:
1)、程序的建立及**:
程序是被系統建立的,當記憶體不足的時候,又會被系統**
2)、程序的級別:
foreground process 前台程序
visible process 可視程序
service process 服務程序:可以提高端別的
background process 後台程序
empty process 空程序(無元件啟動,做程序快取使用,恢復速度快)
總結用的安全與不安全api
hashtable-->hashmap
stringbuffer-->stringbuilder
執行緒安全就是為了在單們時間內某個執行緒操作的是同樣的資料
執行緒安全和執行緒不安全的區別
程序和執行緒 1 程序是靜態的,其實就是指開啟的乙個程式 而執行緒是動態的,是真正執行的單元,執行的過程。其實我們平時看到的程序,是執行緒在執行著,因為執行緒是作為程序的乙個單元存在的。2 同樣作為基本的執行單元,執行緒是劃分得比程序更小的執行單位。3 每個程序都有一段專用的記憶體區域。與此相反,執...
執行緒安全和執行緒不安全的區別
程序和執行緒 1 程序是靜態的,其實就是指開啟的乙個程式 而執行緒是動態的,是真正執行的單元,執行的過程。其實我們平時看到的程序,是執行緒在執行著,因為執行緒是作為程序的乙個單元存在的。2 同樣作為基本的執行單元,執行緒是劃分得比程序更小的執行單位。3 每個程序都有一段專用的記憶體區域。與此相反,執...
執行緒不安全
背景 執行緒不安全 sleep 模擬網路延遲 後多執行緒併發訪問同乙個資源 方法1 同步 塊 語法 synchronized 同步鎖 catch interruptedexception e 方法2 同步方法 使用synchronizd修飾的方法,就叫同步方法,保證a執行緒執行該方法的時候,其他執行...