Java多線程詳解
內容:
1、什麽是多線程
2、兩種創建線程方式
3、線程的匿名內部類使用
4、線程安全
5、線程同步
6、Lock接口
1、什麽是多線程
學習多線程之前,我們先要了解幾個關於多線程有關的概念。
進程:進程指正在運行的程序。確切的來說,當一個程序進入內存運行,即變成一個進程,
進程是處於運行過程中的程序,並且每個進程都具有一定獨立功能
線程:線程是進程中的一個執行單元,來完成進程中的某個功能
進程實例:
線程實例:
一個進程中至少有一個線程。一個進程中是可以有多個線程的,這個應用程序可以稱之為多線程程序
簡而言之:一個程序運行後至少有一個進程,一個進程中可以包含多個線程
什麽是多線程呢?即就是一個程序中有多個線程在同時執行。
通過下圖來區別單線程程序與多線程程序的不同:
單線程程序:
- 若有多個任務只能依次執行。當上一個任務執行結束後,下一個任務開始執行。
- 去網吧上網,網吧只能讓一個人上網,當這個人下機後,下一個人才能上網。
多線程程序:
- 若有多個任務可以同時執行。
- 去網吧上網,網吧能夠讓多個人同時上網。
主線程(單線程程序):
回想我們以前學習中寫過的代碼,當我們在dos命令行中輸入java空格類名回車後,啟動JVM,並且加載對應的
class文件。虛擬機並會從main方法開始執行我們的程序代碼,一直把main方法的代碼執行結束。如果在執行過程
遇到循環時間比較長的代碼,那麽在循環之後的其他代碼是不會被馬上執行的。如下代碼演示:
1 class Person{ 2 String name; 3 Person(String name){ 4 this.name = name; 5 } 6 void music() { 7 for (int i=1;i<=20;i++ ) { 8 System.out.println(name+"在聽第"+i+"首歌"); 9 } 10 } 11 voideat() { 12 for (int i=1;i<=20;i++ ) { 13 System.out.println(name+"在吃第"+i+"口飯"); 14 } 15 } 16 17 } 18 19 class MainThreadDemo{ 20 public static void main(String[] args) { 21 Person p = new Person("xxx"); 22 p.music(); 23 p.eat(); 24 System.out.println("聽完歌吃完飯了,該睡覺了zzZZ~~~"); 25 } 26 }
若在上述代碼中music方法中的循環執行次數很多,這時在p.music();下面的代碼是不會馬上執行的,並且在dos窗口
會看到不停的輸出”xxx在吃第幾口飯”,這樣的語句。為什麽會這樣呢?
原因:
jvm啟動後,必然有一個執行路徑(線程)從main方法開始的,一直執行到main方法結束,這個線程在java中稱之為
主線程(main線程)。當程序的主線程執行時,如果遇到了循環而導致程序在指定位置停留時間過長,則無法馬上
執行下面的程序,需要等待循環結束後能夠執行。
那麽,能否實現一個主線程負責執行其中一個循環,再由另一個線程負責其他代碼的執行,最終實現多部分代碼同時執行的效果?
答:當然能夠實現同時執行,只要通過Java中的多線程技術來解決該問題。
Java多線程詳解