package com.interview; /** * java多線程的兩種實現方式以及run、start方法的區別 * @author MEI.LIU * */ public class ThreadTest { public static void main(String[] args) throws InterruptedException { ThreadTest tt = new ThreadTest(); Thread1 t1 = tt.new Thread1(); Thread2 t2 = tt.new Thread2(); Thread3 t3 = tt.new Thread3(); Thread4 t4 = tt.new Thread4(); //實現Runnable方法的方式必須要用new Thread(tt.new Thread5())來轉換為Thread類型,才能調用Thread的start方法) Thread t5 = new Thread(tt.new Thread5()); t1.start(); Thread.sleep(1000); t2.start(); Thread.sleep(1000); t3.start(); Thread.sleep(1000); t4.start(); Thread.sleep(10000); ((Thread) t5).start(); } class Thread1 extends Thread { public void run() { try { while (true) { for (int i = 1000;; i--) { Thread.sleep(1000); System.out.println("現在i的值為:" + i); } } } catch (InterruptedException e) { e.printStackTrace(); } } } class Thread2 extends Thread { public void run() { try { while (true) { System.out.println("哈哈哈哈哈哈哈哈哈"); Thread.sleep(666); } } catch (InterruptedException e) { e.printStackTrace(); } } } class Thread3 extends Thread { public void run() { try { while (true) { for (int j = 1000;; j--) { System.out.println("目前,j的值是:" + j); Thread.sleep(2000); } } } catch (InterruptedException e) { e.printStackTrace(); } } } class Thread4 extends Thread { public void run() { try { while (true) { System.out.println("TTTTTTTTTTTTTTTTTTT"); Thread.sleep(5000); } } catch (InterruptedException e) { e.printStackTrace(); } } } class Thread5 implements Runnable { public void run() { try { while (true) { System.out.println("咚咚咚咚咚咚咚咚咚咚咚咚咚"); Thread.sleep(1400); } } catch (InterruptedException e) { e.printStackTrace(); } } } }
區別:調用start方法實現多線程,而調用run方法沒有實現多線程
Start:
用start方法來啟動線程,真正實現了多線程運行,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼。通過調用Thread類的start()方法來啟動一個線程,這時此線程處于就緒(可運行)狀態,并沒有運行,一旦得到spu時間片,就開始執行run()方法,這里方法run()稱為線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程隨即終止。
Run:
run()方法只是類的一個普通方法而已,如果直接調用Run方法,程序中依然只有主線程這一個線程,其程序執行路徑還是只有一條,還是要順序執行,還是要等待run方法體執行完畢后才可繼續執行下面的代碼,這樣就沒有達到寫線程的目的。
總結:調用start方法方可啟動線程,而run方法只是thread的一個普通方法調用,還是在主線程里執行。
控制臺輸出結果:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
