Java之自定義執行緒的2種方式
程式:存放在電腦硬碟上的命令集合。 是靜態的
程式:是程式執行之後,在記憶體中產生的資料。
執行緒:組成程式的最小單位。
比如:程式是執行100行的程式碼效果,執行緒是1行的程式碼的效果
每一個程式都是由N個執行緒組成的,至少由1執行緒組成
如何自定義執行緒?
第一種方式:繼承Thread類
1.建立自定義執行緒類 繼承 Thread類
2.在自定義執行緒類中 覆寫run方法
3.建立自定義執行緒類物件
4.啟動執行緒 呼叫start方法注意事項:
①run方法 與 start方法 的區別
run : 順序執行執行緒(沒有併發效果) 直接執行不由CPU排程 達不到併發的效果 即執行完run方法才會往下執行
start: 啟動執行緒 把方法載入執行緒排程池中,由CPU分配時間片來執行執行緒 (有併發效果)
②start方法不能重複呼叫 ==》否則丟擲異常
③主執行緒:主方法由JVM的主執行緒呼叫
④在主執行緒與在主方法中建立的執行緒,在執行之後是完全獨立的,沒有關係
⑤ 執行java程式之後,至少有幾個執行緒?
兩個:主執行緒 + 垃圾回收執行緒(守護執行緒)
啟動兩個執行緒,CPU會在兩個執行緒之間高速切換,看到的效果就是同時執行,其實2個執行緒是在以非常快的速度交替執行
第二種方式:實現Runnable介面
1.建立自定義類 並實現 Runnable介面
2.覆寫run方法
3.建立自定義類物件
4.建立Thread類物件 ==》 呼叫Thread的構造方法:Thread(Runnable r),把上面建立的自定義類物件作為構造方法的引數
該物件包含了建立Runnable實現類物件
該實現類物件已經覆寫了run方法
該Thread物件,本身就有start方法
5.啟動執行緒 ==》呼叫Thread物件的start ,(CPU執行該Thread物件的run方法,從Runnable介面的實現類物件來的)
那麼兩種方式,哪一種更好?
第二種方式更好 ==》 原因:java是單繼承語言,使用繼承,就不能繼承其他類了 ==> 在以後專案需要增加功能的時候,使用第二種方式,它的擴充套件性更強
方式1:
public class Demo {
public static void main(String[] args) {
//3.建立執行緒物件
A a= new A();
B b = new B();
//4.啟動執行緒
a.start();
b.start();
}
}
//1.自定義執行緒類 繼承Thread類
class A extends Thread{
//2.覆寫run方法
public void run() {
for(int i=0;i<100;i++){
System.out.println("AAA ...");
}
}
}
//1.自定義執行緒類 繼承Thread類
class B extends Thread{
//2.覆寫run方法
public void run() {
for(int i=0;i<100;i++){
System.out.println("BBB ...");
}
}
}
執行結果圖: (我們會發現 A和B 在交替出現)
方式2:
public class Demo {
public static void main(String[] args) {
//3.建立自定義類物件
MyThread1 m1 = new MyThread1();
MyThread2 m2 = new MyThread2();
/*
* 自定義類物件m1和m2 : 負責覆寫run方法
* Thread物件t1和t2 : 負責啟動執行緒
*/
//4.建立Thread類物件
Thread t1 = new Thread(m1);
Thread t2 = new Thread(m2);
//5.啟動執行緒
t1.start();
t2.start();
}
}
//1.建立自定義類 實現 Runnable介面
class MyThread1 implements Runnable{
//2.覆寫run方法
public void run() {
for(int i=0;i<100;i++){
System.out.println("... 111 ...");
}
}
}
//1.建立自定義類 實現 Runnable介面
class MyThread2 implements Runnable{
//2.覆寫run方法
public void run() {
for(int i=0;i<100;i++){
System.out.println("... 222 ...");
}
}
}
執行結果圖:(和方式1相同,結果都是交替列印的)
相關文章
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- java執行緒建立的兩種方式Java執行緒
- Java併發程式設計:Java的四種執行緒池的使用,以及自定義執行緒工廠Java程式設計執行緒
- Java建立多執行緒的四種方式Java執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- Java之執行緒同步完成售票例項的6種方式Java執行緒
- Android執行緒管理之ThreadPoolExecutor自定義執行緒池Android執行緒thread
- Java實現多執行緒的三種方式Java執行緒
- 終止java執行緒的2種方法Java執行緒
- JAVA中執行緒建立的2種方法Java執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- Java建立多執行緒的幾種方式實現Java執行緒
- Java 中執行緒池的7種建立方式!Java執行緒
- Java基礎:執行緒的三種建立方式Java執行緒
- 建立執行緒的三種方式執行緒
- 執行緒建立的四種方式執行緒
- 實戰 | 執行緒池的幾種自定義擴充套件執行緒套件
- java的執行緒、建立執行緒的 3 種方式、靜態代理模式、Lambda表示式簡化執行緒Java執行緒模式
- Java併發(三)----建立執行緒的三種方式及檢視程式執行緒Java執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 獲取Java執行緒返回值的幾種方式Java執行緒
- 執行緒池建立的幾種方式執行緒
- 【Java】執行緒的建立方式Java執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- Java多執行緒之—Synchronized方式和CAS方式實現執行緒安全效能對比Java執行緒synchronized
- java執行緒實現的三種方式以及靜態代理Java執行緒
- Java中確保執行緒安全最常用的兩種方式Java執行緒
- Java併發和多執行緒2:3種方式實現陣列求和Java執行緒陣列
- java多執行緒之執行緒的基本使用Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- java執行緒實現方式Java執行緒
- java之執行緒Java執行緒
- C++ 執行緒同步的四種方式C++執行緒
- Java中實現執行緒的方式Java執行緒
- java多執行緒系列之執行緒池Java執行緒
- 【Java基礎】:執行緒的三種建立方式對比分析Java執行緒