Java進階必備之多線程編程
一、圖示

二、多線程編程
何為多線程,通俗的講就是讓你的代碼同時干好幾件事。
而我們的一個代碼文件或者一個項目就是一個進程,而如果我們想提高效率,我們可以多開幾個文件進行多進程,也可以在進程中創(chuàng)建多線程(多寫幾個方法),但是多進程比較耗費資源,所以一般推薦多線程,在代碼里,讓代碼做幾個文件做的事。
多線程編程可以讓我們的代碼擁有更高效率。
三、線程的工作過程
猶如上圖
使用多線程需要先創(chuàng)建一個或者多個線程
然后讓線程調用CPU資源,開始運行
然后運行完畢等待所有線程運行完畢
然后刪除資源,結束線程
Java線程擁有優(yōu)先級
優(yōu)先級就是系統(tǒng)確定線程的調度順序,但是不執(zhí)行順序,因為多線程的執(zhí)行是具有無序性的。
調度順序只是系統(tǒng)分配資源的順序,不分配資源就無法執(zhí)行。
四、創(chuàng)建多線程
如何在Java代碼中創(chuàng)建多線程,Java內置了用于多線程的庫。
1.繼承Thread類,重寫run()方法
我們需要寫一個類A來繼承Thread類,并重寫run()方法。
run()方法里面放我們需要進行多線程的代碼。
然后再在主類中實例化類A的對象,并且調用strat方法。
public class TheadText {
public static void main(String[] args) {
//實例化StartThread,并調用start方法使線程動起來
StartThread t1 = new StartThread("一 ");
t1.start();
StartThread t2 = new StartThread("二 ");
t2.start();
StartThread t3 = new StartThread("三 ");
t3.start();
StartThread t4 = new StartThread("四 ");
t4.start();
}
}
/**
* 1.繼承Thread類并重寫run方法
*/
class StartThread extends Thread{
String name;
StartThread(String name){
this.name = name;
}
@Override
public void run() {
System.out.println(name+1);
System.out.println(name+2);
System.out.println(name+3);
System.out.println(name+4);
System.out.println(name+5);
}
}
運行結果(還可以體現(xiàn)線程的無序性):

2. 實現(xiàn)接口Runnable接口,實現(xiàn)run方法
使用Runnable接口避免了單繼承的局限性,線程類只是實現(xiàn)了 Runnable 接口,還可以繼承其他類
public class TheadText {
public static void main(String[] args) {
StartRunnable startRunnable1 = new StartRunnable(" 一 ");
Thread te1 = new Thread(startRunnable1);
te1.start();
StartRunnable startRunnable2 = new StartRunnable(" 二 ");
Thread te2 = new Thread(startRunnable2);
te2.start();
StartRunnable startRunnable3 = new StartRunnable(" 三 ");
Thread te3 = new Thread(startRunnable3);
te3.start();
StartRunnable startRunnable4 = new StartRunnable(" 四 ");
Thread te4 = new Thread(startRunnable4);
te4.start();
}
}
/**
* 2. 實現(xiàn)Runnable接口,實現(xiàn)run方法
*/
class StartRunnable implements Runnable{
String name;
// 重載一下方法,利于區(qū)分
StartRunnable(String name){
this.name = name;
}
@Override
public void run() {
System.out.println(name+1);
System.out.println(name+2);
System.out.println(name+3);
System.out.println(name+4);
System.out.println(name+5);
}
}
運行結果:

3. 實現(xiàn)Callable接口,實現(xiàn)call方法
這個我研究了挺大一會兒。
實現(xiàn)這個接口后,還需要實現(xiàn)call方法
然后通過FutureTask類來對我們實例化對象進行封裝
最后還要實例化Thread類進行start操作開啟我們的線程
代碼演示:
public class TheadText {
public static void main(String[] args) {
//先實例化
StartCallable a = new StartCallable();
//然后調用FutureTask類
FutureTask<String> te1 = new FutureTask<>(a);
//設置我們的name屬性
a.name = " 一 ";
//開啟我們的線程一
new Thread(te1).start();
StartCallable b = new StartCallable();
FutureTask<String> te2 = new FutureTask<>(b);
b.name = " 二 ";
new Thread(te2).start();
StartCallable c = new StartCallable();
FutureTask<String> te3 = new FutureTask<>(c);
c.name = " 三 ";
new Thread(te3).start();
StartCallable d = new StartCallable();
FutureTask<String> te4 = new FutureTask<>(d);
d.name = " 四 ";
new Thread(te4).start();
}
}
/**
* 實現(xiàn)Callable接口,實現(xiàn)call方法
*/
class StartCallable implements Callable<String>{
String name ;
public String call() throws Exception{
System.out.println(name+1);
System.out.println(name+2);
System.out.println(name+3);
System.out.println(name+4);
return name;
}
}
運行結果:

線程的生命周期
線程在我們創(chuàng)建后(出生)等待CPU的資源分配,然后開始工作,在工作完我們分配的工作后,就會(死亡)消失
到此這篇關于Java進階必備之多線程編程的文章就介紹到這了,更多相關Java多線程編程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java索引越界異常Exception java.lang.IndexOutOfBoundsException
本文主要介紹了Java索引越界異常Exception java.lang.IndexOutOfBoundsException的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
Java swing框架實現(xiàn)的貪吃蛇游戲完整示例
這篇文章主要介紹了Java swing框架實現(xiàn)的貪吃蛇游戲,結合完整實例形式分析了java使用swing框架結合awt圖形繪制實現(xiàn)貪吃蛇游戲的具體步驟與相關實現(xiàn)技巧,需要的朋友可以參考下2017-12-12
使用Spring?Cloud?Stream處理Java消息流的操作流程
Spring?Cloud?Stream是一個用于構建消息驅動微服務的框架,能夠與各種消息中間件集成,如RabbitMQ、Kafka等,今天我們來探討如何使用Spring?Cloud?Stream來處理Java消息流,需要的朋友可以參考下2024-08-08

