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

創(chuàng)建java多線程程序

 更新時間:2021年06月23日 15:23:35   作者:歌者莫姓胡  
Java 給多線程編程提供了內(nèi)置的支持。一條線程指的是進(jìn)程中一個單一順序的控制流,一個進(jìn)程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù)。希望本篇文章能夠給你帶來幫助

創(chuàng)建多線程程序的第一種方式:創(chuàng)建Thread類的子類

java.lang.Thread類:是描述線程的類,我們想要實現(xiàn)多線程程序,就必須繼承Thread類

實現(xiàn)步驟:

  1. 創(chuàng)建一個Thread類的子類
  2. 在Thread類的子類中重寫Thread類中的run方法,設(shè)置線程任務(wù)(開啟線程要做什么?)
  3. 創(chuàng)建Thread類的子類對象
  4. 調(diào)用Thread類中的方法start方法,開啟新的線程,執(zhí)行run方法

void start()使該線程開始執(zhí)行;Java虛擬機(jī)調(diào)用該線程的run方法。

結(jié)果是兩個線程并發(fā)地運(yùn)行﹔當(dāng)前線程〈main線程〉和另一個線程〈創(chuàng)建的新線程,執(zhí)行其run方法)。

多次啟動一個線程是非法的(只能調(diào)用一次start方法)。特別是當(dāng)線程已經(jīng)結(jié)束執(zhí)行后,不能再重新啟動。

java程序?qū)儆趽屨际秸{(diào)度,那個線程的優(yōu)先級高,那個線程優(yōu)先執(zhí)行;同一個優(yōu)先級,隨機(jī)選擇一個執(zhí)行

public class threadex extends Thread{
    public void run(){
        for (int i = 0; i < 20; i++) {
            System.out.println("run"+i);
        }
    }
}
public class thread {
    public static void main(String[] args) {
        threadex mt=new threadex();
        mt.start();
        for (int i = 0 ; i < 20; i++) {
            System.out.println("main"+i);
        }
    }
}

最終結(jié)果是隨機(jī)的:

多線程隨機(jī)性原理:

創(chuàng)建多線程程序的第二種方式:實現(xiàn)RunnabLe接口

java.Lang.Runnable

Runnable接口應(yīng)該由那些打算通過某一線程執(zhí)行其實例的類來實現(xiàn)。類必須定義一個稱為run的無參數(shù)方法。

java.Lang.Thread類的構(gòu)造方法

Thread ( Runnable target)分配新的 Thread 對象。

Thread ( Runnable target, string name)分配新的Thread 對象。

實現(xiàn)步驟:

  1. 創(chuàng)建一個Runnable接口的實現(xiàn)類
  2. 在實現(xiàn)類中重寫Runnable接口的run方法,設(shè)置線程任務(wù)
  3. 創(chuàng)建一個Runnable接口的實現(xiàn)類對象
  4. 創(chuàng)建Thread類對象,構(gòu)造方法中傳遞Runnable接口的實現(xiàn)類對象
  5. 調(diào)用Thread類中的start方法,開啟新的線程執(zhí)行run方法
public class threadex2 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}
public class thread {
    public static void main(String[] args) {
        //第二種
        threadex2 mt1=new threadex2();
        Thread t=new Thread(mt1);
        t.start();
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+i);
        }
    }
}

結(jié)果同樣是隨機(jī)的:

實現(xiàn)Runnable接口創(chuàng)建多線程程序的好處:

1.避免了單繼承的局限性

一個類只能繼承一個類(一個人只能有一個親爹),類繼承了Thread類就不能繼承其他的類實現(xiàn)了Runnable接口,還可以繼承其他的類,實現(xiàn)其他的接口

2.增強(qiáng)了程序的擴(kuò)展性,降低了程序的耦合性(解耦)

實現(xiàn)Runnable接口的方式,把設(shè)置線程任務(wù)和開啟新線程進(jìn)行了分離(解耦)實現(xiàn)類中,重寫了run方法:用來設(shè)置線程任務(wù)

創(chuàng)建Thread類對象,調(diào)用start方法:用來開啟新線程

匿名內(nèi)部類方式實現(xiàn)線程的創(chuàng)建

匿名:沒有名字

內(nèi)部類:寫在其他類內(nèi)部的類

匿名內(nèi)部類作用:簡化代碼

把子類繼承父類,重寫父類的方法,創(chuàng)建子類對象合一步完成

把實現(xiàn)類實現(xiàn)接口,重寫接口中的方法,創(chuàng)建實現(xiàn)類對象合成一步完成

匿名內(nèi)部類的最終產(chǎn)物:子類/實現(xiàn)類對象,而這個類沒有名字

格式:

new 父類/接口 () {

重復(fù)父類/接口中的方法

};

    public static void main(String[] args) {
        new Thread(){
            public void run(){
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName()+"cs"+i);
                }
            }
        }.start();//Thread-0
        //線程的接口Runnable
        //Runnable r=new RunnableImpl();//多態(tài)
        Runnable r=new Runnable(){
            //重寫run方法,設(shè)置線程任務(wù)
            public void run(){
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName()+"ff"+i);
                }
            }
        };
        new Thread(r).start();
        //簡化
        new Thread(new Runnable(){
            //重寫run方法,設(shè)置線程任務(wù)
            public void run(){
                for (int i = 0; i < 20; i++) {
                    System.out.println(Thread.currentThread().getName()+"hj"+i);
                }
            }
        }).start();
    }

Thread類中的常用方法:

獲取線程的名稱:

1.使用Thread類中的方法getName() String getName() 返回該線程的名稱。

2.可以先獲取到當(dāng)前正在執(zhí)行的線程,使用線程中的方法getName()獲取線程的名稱

static Thread currentThread()返回對當(dāng)前正在執(zhí)行的線程對象的引用。

//方法一
public class threadfun extends Thread{
    public void run(){
        String name = getName();
        System.out.println(name);
    }
}
/*
線程的名稱:
主線程: main
新線程:Thread-0, Thread-1 , Thread-2
 */
public class threadfunmain {
    public static void main(String[] args) {
        threadfun mt = new threadfun();
        mt.start();//Thread-0
        new threadfun().start();//Thread-1
        new threadfun().start();//Thread-2
    }
}
方法二:
public class threadfun extends Thread{
    public void run(){
        //方法二
        Thread th = Thread.currentThread();
        System.out.println(th);
        String name = getName();
        System.out.println(name);
        //System.out.println(Thread.currentThread().getName());
    }
}
public class threadfunmain {
    public static void main(String[] args) {
        threadfun mt = new threadfun();
        mt.start();//Thread[Thread-0,5,main] Thread-0
        new threadfun().start();//Thread[Thread-1,5,main] Thread-1
        new threadfun().start();//Thread[Thread-2,5,main] Thread-2
        System.out.println(Thread.currentThread().getName());//main
        //主線程中只能用第二種方法獲取,因為測試類沒有繼承Thread類,沒有g(shù)etname方法
    }
}

設(shè)置線程的名稱:(了解)

1.使用Thread類中的方法setName(名字)

void setName ( String name)改變線程名稱,使之與參數(shù)name相同。

2.創(chuàng)建一個帶參數(shù)的構(gòu)造方法,參數(shù)傳遞線程的名稱;調(diào)用父類的帶參構(gòu)造方法,把線程名稱傳遞給父類,讓父類(Thread)給子線程起一個名字

Thread ( String name)分配新的Thread 對象。

public class threadfun extends Thread{
    public void run(){
        //設(shè)置線程的名稱方法一
        System.out.println(Thread.currentThread().getName());
    }
    //設(shè)置線程的名稱方法二
    threadfun(){}
    threadfun(String name){
        super(name);
    }
}
public class threadfunmain {
    public static void main(String[] args) {
        threadfun mt = new threadfun(); 
        //設(shè)置線程的名稱方法一
        mt.setName("ess");
        mt.start();
        //設(shè)置線程的名稱方法二
        new threadfun("ff").start();
    }
}

public static void sleep(Long millis):使當(dāng)前正在執(zhí)行的線程以指定的毫秒數(shù)暫停(暫時停止執(zhí)行)。毫秒數(shù)結(jié)束之后,線程繼續(xù)執(zhí)行

        //sleep
        for (int i = 0; i < 20; i++) {
            System.out.println(i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

總結(jié):

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

相關(guān)文章

  • springboot前后端分離集成CAS單點登錄(統(tǒng)一認(rèn)證)

    springboot前后端分離集成CAS單點登錄(統(tǒng)一認(rèn)證)

    單點登錄是一種身份認(rèn)證和授權(quán)技術(shù),允許用戶在多個應(yīng)用系統(tǒng)中使用同一套用戶名和密碼進(jìn)行登錄,本文主要介紹了springboot前后端分離集成CAS單點登錄,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • 淺析Java 對象引用和對象本身

    淺析Java 對象引用和對象本身

    這篇文章主要介紹了Java 對象引用和對象本身的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • maven項目在實踐中的構(gòu)建管理之路的方法

    maven項目在實踐中的構(gòu)建管理之路的方法

    這篇文章主要介紹了maven項目在實踐中的構(gòu)建管理之路的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Java多線程之JUC(java.util.concurrent)的常見類(多線程編程常用類)

    Java多線程之JUC(java.util.concurrent)的常見類(多線程編程常用類)

    這篇文章主要給大家介紹了關(guān)于Java多線程之JUC(java.util.concurrent)的常見類(多線程編程常用類)的相關(guān)資料,Java中的JUC(java.util.concurrent)包提供了一些并發(fā)編程中常用的類,這些類可以幫助我們更方便地實現(xiàn)多線程編程,需要的朋友可以參考下
    2024-02-02
  • java虛擬機(jī)中多線程總結(jié)

    java虛擬機(jī)中多線程總結(jié)

    在本篇內(nèi)容中小編給大家分享的是關(guān)于java虛擬機(jī)中多線程的知識點總結(jié)內(nèi)容,需要的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • MyBatis輸入映射和輸出映射實例詳解

    MyBatis輸入映射和輸出映射實例詳解

    mapper.xml是我們配置操作數(shù)據(jù)庫的sql語句的地方.這篇文章主要介紹了MyBatis輸入映射和輸出映射實例詳解,需要的朋友可以參考下
    2017-02-02
  • 解決dubbo啟動報服務(wù)注冊失敗Failed?to?register?dubbo

    解決dubbo啟動報服務(wù)注冊失敗Failed?to?register?dubbo

    這篇文章主要介紹了解決dubbo啟動報服務(wù)注冊失敗Failed?to?register?dubbo問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java生成訂單號或唯一id的高并發(fā)方案(4種方法)

    Java生成訂單號或唯一id的高并發(fā)方案(4種方法)

    本文主要介紹了Java生成訂單號或唯一id的高并發(fā)方案,包括4種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • SpringCloud Netflix Ribbon超詳細(xì)講解

    SpringCloud Netflix Ribbon超詳細(xì)講解

    這篇文章主要介紹了SpringCloud筆記HoxtonNetflix之Ribbon負(fù)載均衡,Ribbon是管理HTTP和TCP服務(wù)客戶端的負(fù)載均衡器,Ribbon具有一系列帶有名稱的客戶端(Named Client),對SpringCloud Ribbon負(fù)載均衡相關(guān)知識感興趣的朋友一起看看吧
    2022-10-10
  • 如何基于springboot-admin實現(xiàn)后臺監(jiān)控

    如何基于springboot-admin實現(xiàn)后臺監(jiān)控

    這篇文章主要介紹了如何基于springboot-admin實現(xiàn)后臺監(jiān)控,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04

最新評論