日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程创建两种方式

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程创建两种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方式一(繼承于Thread類)

  • 創建一個繼承于Thread類的子類
  • 重寫Thread類的run() --> 將此線程執行的操作聲明在run()中
  • 創建Thread類的子類的對象
  • 通過此對象調用start()
  • package com.wdl.java;//1. 創建一個繼承于Thread類的子類 class MyThread extends Thread {//2. 重寫Thread類的run()@Overridepublic void run() {for (int i = 0; i < 100; i++) {if(i % 2 == 0){System.out.println(Thread.currentThread().getName() + ":" + i);}}} }public class ThreadTest {public static void main(String[] args) {//3. 創建Thread類的子類的對象MyThread t1 = new MyThread();//4.通過此對象調用start():①啟動當前線程 ② 調用當前線程的run()t1.start();//問題一:我們不能通過直接調用run()的方式啟動線程。相當于直接調用run方法 // t1.run();//問題二:再啟動一個線程,遍歷100以內的偶數。不可以還讓已經start()的線程去執行。會報IllegalThreadStateException // t1.start();//我們需要重新創建一個線程的對象MyThread t2 = new MyThread();t2.start();//如下操作仍然是在main線程中執行的。for (int i = 0; i < 100; i++) {if(i % 2 == 0){System.out.println(Thread.currentThread().getName() + ":" + i + "***********main()************");}}}}

    方式二(實現Runnable接口)

  • 創建一個實現了Runnable接口的類
  • 實現類去實現Runnable中的抽象方法:run()
  • 創建實現類的對象
  • 將此對象作為參數傳遞到Thread類的構造器中,創建Thread類的對象
  • 通過Thread類的對象調用start()
  • package com.wdl.java;//1. 創建一個實現了Runnable接口的類 class MThread implements Runnable{//2. 實現類去實現Runnable中的抽象方法:run()@Overridepublic void run() {for (int i = 0; i < 100; i++) {if(i % 2 == 0){System.out.println(Thread.currentThread().getName() + ":" + i);}}} }public class ThreadTest1 {public static void main(String[] args) {//3. 創建實現類的對象MThread mThread = new MThread();//4. 將此對象作為參數傳遞到Thread類的構造器中,創建Thread類的對象Thread t1 = new Thread(mThread);t1.setName("線程1");//5. 通過Thread類的對象調用start():① 啟動線程 ②調用當前線程的run()-->調用了Runnable類型的target的run()t1.start();//再啟動一個線程,遍歷100以內的偶數Thread t2 = new Thread(mThread);t2.setName("線程2");t2.start();}}

    比較

    這兩種方式調用的都是Thread類里面的start方法

    開發中:優先選擇:實現Runnable接口的方式
    原因:1. 實現的方式沒有類的單繼承性的局限性

    2. 實現的方式更適合來處理多個線程有共享數據的情況。聯系:public class Thread implements Runnable相同點:兩種方式都需要重寫run(),將線程要執行的邏輯聲明在run()中。

    總結

    以上是生活随笔為你收集整理的线程创建两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。