java线程通信概念_java基础线程总结(线程概念、线程创建方式、线程间通信、线程重要方法)...
基礎篇之《線程》
@author :kern
————————————————————————————————————————————————————————————————
一:進程:是一個正在執行的程序。每一個進程都有一個執行順序,該順序是一個執行路徑,或者叫一個執行單元。
二:線程:是進程中的一個獨立的控制單元,線程在控制著進程的執行。一個進程中至少有一個線程。
三:多線程:
3.1 繼承Thread類創建線程
方法:①創建一個類繼承Thread類。
②復寫Thread類的run方法。
③創建子類對象,調用Thread類的start方法,該方法作用是開始線程,調用run方法。
3.2線程的運行狀態:
① 創建
② 運行
③ 凍結 有兩種情況,一是sleep(時間),時間一到就喚醒了;二是wait(),要被notify()喚醒。
④ 消亡 有兩種情況,一是stop(),二是run()方法運行結束后,線程會自動消亡。
⑤ 阻塞 又叫臨時狀態,即有執行資格但是沒有執行權。
3.3 實現Runnable接口創建線程
方法:①創建類然后實現Runnable接口。
②復寫Runnable接口的run()方法。
③通過Thread類創建線程對象,
④創建Runnable接口的子類對象,然后將其對象作為實際參數傳遞給Thread類的構造函數。
⑤調用Thread類的start()方法,開啟線程調用run()方法。
3.4 繼承和實現的區別:
實現Runnable接口避免了單繼承的局限性。Runnable實現的同時還可以繼承。
3.5 線程的安全問題:這里就說說線程中我們最常見的問題---執行資格和執行權的問題。
a。問題原因:當多條語句在操作同一個線程共享數據時,一個線程對多條語句只執行了一部分,還沒有執行完,
另一個線程參與進來執行,導致共享數據的錯誤。
b。解決方案:對多條線程作為共享數據語句,只能讓一個線程都執行完了。在執行的過程中,其他線程不可以參與執行。
同步代碼塊:synchronized(對象)
{
需要被同步的代碼;
}
注:對象可以為任意對象 如:Object obj=new Object(); 對象如同鎖,持有鎖的可以再同步中執行,
沒有持有鎖的即使獲取cpu的執行權也進不去。
3.5 同步的兩種表現形式:
a。同步代碼塊;見3.4
b。同步函數:直接將synchronized作為修飾符修飾函數。
3.6 鎖;a。同步函數用的是哪一個鎖呢?
函數需要被對象調用,那么函數都有一個所屬對象,就是this。所以同步函數使用的鎖是this。
b。如果同步函數被靜態修飾,那么使用的鎖是什么呢?
靜態方法中不可以定義this。靜態進內存時,內存中沒有本類對象,但是一定有該類對應的字節碼文件。
類名。class,該對象的類型是class。所以靜態同步方法,使用的鎖是該方法所在類的字節碼文件,類名。class;
四:線程間通信 :就是多個線程操作同一個資源,單單是操作的動作不同;
4.1 wait(),notify(),notifyAll(),用來操作線程,為什么定義在Object類中?
a。這些方法存在與同步中。
b。使用這些方法時必須要標識所屬的同步的鎖;
c。鎖可以使任意對象,所以任意對象調用的方法一定定義在Object類中。
☆ 也就是說,等待和喚醒必須是同一個鎖,而鎖可以是任意對象所以可以被任意對象調用的方法定義在Object類中。
4.2 wait(),sleep()有什么區別?
wait()釋放資源,釋放鎖。
sleep()釋放資源,不釋放鎖。
4.3 JDK1.5的特性:提供了多線程升級解決方案。
a。將同步synchronized替換成Lock操作。
b。將Object中的wait,notify,notifyAll替換成condition對象。該對象可以通過Lock鎖進行獲取。
4.4 停止線程:
a。如何停止線程呢?
·原理:只有一種,run()方法結束。開啟多線程運行,運行代碼往往是循環結構,只要控制循環語句,就可以讓run()方法結束。
·特殊情況:當線程處于停滯狀態時,就無法讀取標記結束循環語句,那么線程就不會結束,這時需要對凍結進行清除。
強制讓線程恢復到運行狀態,這樣就可以操作標記結束線程。于是Thread類中提供了方法interrupt().
4.5 守護線程:void setDaemon(boolean on) 該方法必須在啟動線程前使用。
4.6 join() 等待線程終止:即當A線程運行到B線程的join方法時,那么A線程就會等待,等待B線程全部運行結束再運行。
4.7 優先級;指線程搶到CUP的執行權的頻率。默認優先級為5,最高為10;設置優先級setPriority()方法。
-----------------------------------------------------------------------------------------------------
我是一個菜菜菜菜鳥,想飛卻怎么也飛不高,尋尋覓覓,尋尋覓覓·····
自學的過程中總結出來的一些關于函數的知識點,我就當一次復習了。
有需要的可以參考一下,如有漏掉的或者不完善的謝謝大家指正。
總結
以上是生活随笔為你收集整理的java线程通信概念_java基础线程总结(线程概念、线程创建方式、线程间通信、线程重要方法)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ue4加载本地版本_【虚幻4】创建本地数
- 下一篇: java数据类型代表价格_解读Java数