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

java 多線(xiàn)程Thread與runnable的區(qū)別

 更新時(shí)間:2017年08月18日 16:41:09   投稿:lqh  
這篇文章主要介紹了java 多線(xiàn)程Thread與runnable的區(qū)別的相關(guān)資料,java線(xiàn)程有兩種方法繼承thread類(lèi)與實(shí)現(xiàn)runnable接口,下面就提供實(shí)例幫助大家理解,需要的朋友可以參考下

java 多線(xiàn)程Thread與runnable的區(qū)別

java中實(shí)現(xiàn)多線(xiàn)程的方法有兩種:繼承Thread類(lèi)和實(shí)現(xiàn)runnable接口

1,繼承Thread類(lèi),重寫(xiě)父類(lèi)run()方法

  public class thread1 extends Thread {
 
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是線(xiàn)程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.run();
        th2.run();
    }
   }
 

run()方法只是普通的方法,是順序執(zhí)行的,即th1.run()執(zhí)行完成后才執(zhí)行th2.run(),這樣寫(xiě)只用一個(gè)主線(xiàn)程。多線(xiàn)程就失去了意義,所以應(yīng)該用start()方法來(lái)啟動(dòng)線(xiàn)程,start()方法會(huì)自動(dòng)調(diào)用run()方法。上述代碼改為:

 public class thread1 extends Thread {
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是線(xiàn)程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.start();
        th2.start();
    }
}

通過(guò)start()方法啟動(dòng)一個(gè)新的線(xiàn)程。這樣不管th1.start()調(diào)用的run()方法是否執(zhí)行完,都繼續(xù)執(zhí)行th2.start()如果下面有別的代碼也同樣不需要等待th2.start()執(zhí)行完成,而繼續(xù)執(zhí)行。(輸出的線(xiàn)程id是無(wú)規(guī)則交替輸出的) 

2,實(shí)現(xiàn)runnable接口

public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("線(xiàn)程A");
        thread2 th2 = new thread2("Thread-B");
        th1.run();
        th2.run();
    }
}

和Thread的run方法一樣Runnable的run只是普通方法,在main方法中th2.run()必須等待th1.run()執(zhí)行完成后才能執(zhí)行,程序只用一個(gè)線(xiàn)程。要多線(xiàn)程的目的,也要通過(guò)Thread的start()方法(runnable是沒(méi)有start方法)。上述代碼修改為:

public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("線(xiàn)程A");
        thread2 th2 = new thread2("Thread-B");
        Thread myth1 = new Thread(th1);
        Thread myth2 = new Thread(th2);
        myth1.start();
        myth2.start();
    }
}

 總結(jié):實(shí)現(xiàn)java多線(xiàn)程的2種方式,runable是接口,thread是類(lèi),runnable只提供一個(gè)run方法,建議使用runable實(shí)現(xiàn) java多線(xiàn)程,不管如何,最終都需要通過(guò)thread.start()來(lái)使線(xiàn)程處于可運(yùn)行狀態(tài)。

以上就是關(guān)于java多線(xiàn)程的實(shí)例詳解,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,本站關(guān)于線(xiàn)程的文章還有很多,希望大家搜索查閱,大家共同進(jìn)步!

相關(guān)文章

  • 通過(guò)Session案例分析一次性驗(yàn)證碼登錄

    通過(guò)Session案例分析一次性驗(yàn)證碼登錄

    這篇文章主要介紹了通過(guò)Session案例分析一次性驗(yàn)證碼登錄,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • IDEA中Translation使用及問(wèn)題解決

    IDEA中Translation使用及問(wèn)題解決

    本文主要介紹了IDEA中Translation使用及問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java基于PDFbox實(shí)現(xiàn)讀取處理PDF文件

    Java基于PDFbox實(shí)現(xiàn)讀取處理PDF文件

    PDFbox是一個(gè)開(kāi)源的、基于Java的、支持PDF文檔生成的工具庫(kù),它可以用于創(chuàng)建新的PDF文檔,修改現(xiàn)有的PDF文檔,還可以從PDF文檔中提取所需的內(nèi)容。本文將具體介紹一下PDFbox讀取處理PDF文件的示例代碼,感興趣的可以學(xué)習(xí)一下
    2022-02-02
  • Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié)

    Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié)

    這篇文章主要介紹了Spring?Boot之Validation自定義實(shí)現(xiàn)方式的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java內(nèi)存之happens-before和重排序

    Java內(nèi)存之happens-before和重排序

    在JMM(Java內(nèi)存模型)中,如果一個(gè)操作執(zhí)行的結(jié)果需要對(duì)另一個(gè)操作可見(jiàn),那么這兩個(gè)操作之間必須存在happens-before關(guān)系。下面小編來(lái)簡(jiǎn)單介紹一下
    2019-05-05
  • Hibernate中5個(gè)核心接口知識(shí)點(diǎn)整理

    Hibernate中5個(gè)核心接口知識(shí)點(diǎn)整理

    在本篇文章里小編給大家整理的是一篇關(guān)于Hibernate中5個(gè)核心接口知識(shí)點(diǎn)整理等內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)參考下。
    2021-08-08
  • java實(shí)戰(zhàn)之猜字小游戲

    java實(shí)戰(zhàn)之猜字小游戲

    這篇文章主要介紹了java實(shí)戰(zhàn)之猜字小游戲,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助呦,需要的朋友可以參考下
    2021-04-04
  • springboot中引入日志文件生成的配置詳解

    springboot中引入日志文件生成的配置詳解

    本文主要介紹了springboot中引入日志文件生成的配置詳解,包括日志級(jí)別的設(shè)置、日志格式的配置以及日志輸出的位置等,從而幫助開(kāi)發(fā)者更好地進(jìn)行開(kāi)發(fā)與調(diào)試
    2023-10-10
  • Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

    Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程

    這篇文章主要介紹了Java Web項(xiàng)目中實(shí)現(xiàn)文件下載功能的實(shí)例教程,分別講解了通過(guò)超鏈接實(shí)現(xiàn)下載以及通過(guò)Servlet程序?qū)崿F(xiàn)下載的方式,需要的朋友可以參考下
    2016-05-05
  • Java動(dòng)態(tài)加載類(lèi)示例詳解

    Java動(dòng)態(tài)加載類(lèi)示例詳解

    這篇文章主要給大家介紹了關(guān)于Java動(dòng)態(tài)加載類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評(píng)論