欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java多線程開啟的三種方式你知道嗎

 更新時(shí)間:2022年02月07日 11:20:58   作者:xiaostudy  
這篇文章主要為大家詳細(xì)介紹了java多線程開啟的三種方式,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>

1、繼承Thread類,新建一個(gè)當(dāng)前類對(duì)象,并且運(yùn)行其start()方法

 package com.xiaostudy.thread;
  
  /**
   * @desc 第一種開啟線程的方式
  * @author xiaostudy
   *
   */
  public class Demo1_Thread extends Thread {
  
     public void run() {
         for (int i = 0; i < 10; i++) {
             System.out.println(i + " run()...");
         }
     }
 
   public static void main(String[] args) {
         Demo1_Thread demo = new Demo1_Thread();
         demo.start();
         for (int i = 0; i < 10; i++) {
             System.out.println(i + " main()...");1         }
     }
 
 }

上面這里就是當(dāng)前類的一個(gè)線程和main線程一起運(yùn)行

2、實(shí)現(xiàn)Runnable接口,然后新建當(dāng)前類對(duì)象,接著新建Thread對(duì)象時(shí)把當(dāng)前類對(duì)象傳進(jìn)去,最后運(yùn)行Thread對(duì)象的start()方法

 package com.xiaostudy.thread;
  
  /**
   * @desc 第二種開啟線程的方式
   * @author xiaostudy
   *
   */
  public class Demo2_Thread implements Runnable {
  
     public void run() {
         for (int i = 0; i < 10; i++) {
             System.out.println(i + " run()...");
         }
     }
 
     public static void main(String[] args) {
         Demo2_Thread demo = new Demo2_Thread();
         Thread thread = new Thread(demo);
         thread.start();     
         for (int i = 0; i < 10; i++) {
            System.out.println(i + " main()...");
         }
     }
 
 }

分析:從Thread的有參構(gòu)造方法進(jìn)去

當(dāng)前類傳進(jìn)去,進(jìn)入到Thread的init()方法

再跟進(jìn)去

下面截圖問題,分開兩個(gè),看行號(hào)。就把當(dāng)前類賦值給了Thread的target屬性

再回過頭來看Thread對(duì)象的run()方法,因?yàn)楫?dāng)Thread對(duì)象的start()方法調(diào)用時(shí),是執(zhí)行Thread對(duì)象的run()方法(這里就不深入分析)

這里的target的值就是當(dāng)前類對(duì)象,所以最后還是執(zhí)行了當(dāng)前類對(duì)象的run()方法

3、實(shí)現(xiàn)Callable接口,新建當(dāng)前類對(duì)象,在新建FutureTask類對(duì)象時(shí)傳入當(dāng)前類對(duì)象,接著新建Thread類對(duì)象時(shí)傳入FutureTask類對(duì)象,最后運(yùn)行Thread對(duì)象的start()方法

package com.xiaostudy.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

/**
 * @desc 第三種開啟線程的方式
 * @author xiaostudy
 *
 */
public class Demo3_Thread implements Callable {

    public static void main(String[] args) {
        Callable callable = new Demo3_Thread();
        FutureTask futureTask = new FutureTask(callable);
        Thread thread = new Thread(futureTask);
        thread.start();
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " main()...");
        }
    }

    public Object call() throws Exception {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " call()...");
        }
        return null;
    }

}

Demo3_Thread.java

分析:同樣從Thread的有參構(gòu)造方法進(jìn)去

同樣也是跟第二種方法一樣

那么,就看Runnable接口和FutureTask類的關(guān)系。從下面的圖看出FutureTask類是Runnable接口的繼承接口的實(shí)現(xiàn)類。

接著看看FutureTask的有參構(gòu)造

從下圖可以看出,F(xiàn)utureTask的有參構(gòu)造,把當(dāng)前類對(duì)象傳給了FutureTask的callable屬性

那么當(dāng)Thread執(zhí)行start()方法時(shí),就是執(zhí)行FutureTask的run()方法,從下面圖看到,最后就是執(zhí)行了當(dāng)前類的call()方法

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!      

您可能感興趣的文章:

相關(guān)文章

  • spring無法引入注解及import org.springframework.web.bind.annotation.*報(bào)錯(cuò)的解決

    spring無法引入注解及import org.springframework.web.bind.annota

    本文主要介紹了spring無法引入注解及import org.springframework.web.bind.annotation.*報(bào)錯(cuò)的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • @Valid注解的作用及@Valid注解與@Validated的區(qū)別

    @Valid注解的作用及@Valid注解與@Validated的區(qū)別

    這篇文章主要介紹了@Valid注解的作用及@Valid注解與@Validated的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn)

    通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn)

    這篇文章主要介紹了通過Maven進(jìn)行jedis連接redis的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • SpringSecurity rememberme功能實(shí)現(xiàn)過程解析

    SpringSecurity rememberme功能實(shí)現(xiàn)過程解析

    這篇文章主要介紹了SpringSecurity rememberme功能實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • JAVA設(shè)計(jì)模式之調(diào)停者模式詳解

    JAVA設(shè)計(jì)模式之調(diào)停者模式詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之調(diào)停者模式詳解,調(diào)停者模式是對(duì)象的行為模式,調(diào)停者模式包裝了一系列對(duì)象相互作用的方式,使得這些對(duì)象不必相互明顯引用,從而使它們可以較松散地耦合,需要的朋友可以參考下
    2015-04-04
  • 聊聊Redis二進(jìn)制數(shù)組Bitmap

    聊聊Redis二進(jìn)制數(shù)組Bitmap

    這篇文章主要介紹了Redis二進(jìn)制數(shù)組Bitmap,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析

    POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析

    這篇文章主要介紹了POST方法給@RequestBody傳參數(shù)失敗的解決及原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決DataOutputStream亂碼的問題

    解決DataOutputStream亂碼的問題

    這篇文章主要介紹了DataOutputStream亂碼問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java從零編寫吃貨聯(lián)盟訂餐系統(tǒng)全程講解

    Java從零編寫吃貨聯(lián)盟訂餐系統(tǒng)全程講解

    這篇文章主要介紹了Java訂餐系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • SpringBoot實(shí)現(xiàn)發(fā)送郵件任務(wù)

    SpringBoot實(shí)現(xiàn)發(fā)送郵件任務(wù)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)發(fā)送郵件任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評(píng)論