最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

創(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類:是描述線程的類,我們想要實(shí)現(xiàn)多線程程序,就必須繼承Thread類

實(shí)現(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)建多線程程序的第二種方式:實(shí)現(xiàn)RunnabLe接口

java.Lang.Runnable

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

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

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

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

實(shí)現(xiàn)步驟:

  1. 創(chuàng)建一個Runnable接口的實(shí)現(xiàn)類
  2. 在實(shí)現(xiàn)類中重寫Runnable接口的run方法,設(shè)置線程任務(wù)
  3. 創(chuàng)建一個Runnable接口的實(shí)現(xiàn)類對象
  4. 創(chuàng)建Thread類對象,構(gòu)造方法中傳遞Runnable接口的實(shí)現(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ī)的:

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

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

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

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

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

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

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

匿名:沒有名字

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

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

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

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

匿名內(nèi)部類的最終產(chǎn)物:子類/實(shí)現(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)文章

  • Java中的反射機(jī)制詳解

    Java中的反射機(jī)制詳解

    這篇文章主要介紹了Java中的反射機(jī)制詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • spring boot密碼加密配置與實(shí)例詳解

    spring boot密碼加密配置與實(shí)例詳解

    BCrypt是一種專為密碼哈希設(shè)計的算法,它被廣泛認(rèn)為是安全的選擇之一,這篇文章主要介紹了spring boot密碼加密配置與實(shí)例詳解,需要的朋友可以參考下
    2024-12-12
  • Java調(diào)用pyzbar解析base64二維碼過程解析

    Java調(diào)用pyzbar解析base64二維碼過程解析

    這篇文章主要介紹了Java調(diào)用pyzbar解析base64二維碼過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • springboot打包實(shí)現(xiàn)項目JAR包和依賴JAR包分離

    springboot打包實(shí)現(xiàn)項目JAR包和依賴JAR包分離

    這篇文章主要介紹了springboot打包實(shí)現(xiàn)項目JAR包和依賴JAR包分離,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java 手寫LRU緩存淘汰算法

    Java 手寫LRU緩存淘汰算法

    本文主要講了如何通過哈希鏈表這種數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)LRU算法,提供了三種實(shí)現(xiàn)思路,第一種從雙向鏈表開始,借助于HashMap來實(shí)現(xiàn)滿足要求的LRUCache
    2021-05-05
  • java常見面試題及答案匯總

    java常見面試題及答案匯總

    本文提供Java面試題集錦,涵蓋封裝、繼承、多態(tài)等核心概念,旨在幫助求職者全面復(fù)習(xí),提升面試表現(xiàn),從基礎(chǔ)知識到實(shí)際應(yīng)用,內(nèi)容豐富,適合各類求職者,需要的朋友可以參考下
    2024-09-09
  • Java8新特性詳解與實(shí)戰(zhàn)分享

    Java8新特性詳解與實(shí)戰(zhàn)分享

    Java 8作為Java語言的一個重要更新,引入了一系列新特性,這些特性不僅提高了代碼的可讀性和可維護(hù)性,還增強(qiáng)了程序的性能,本文將詳細(xì)介紹Java 8中的幾個關(guān)鍵使用技巧,并通過代碼案例來展示它們的應(yīng)用,需要的朋友可以參考下
    2024-06-06
  • Java在PDF中替換文字詳解及可能遇到的問題

    Java在PDF中替換文字詳解及可能遇到的問題

    本文詳細(xì)介紹了如何使用Java和Spire.PDF?for?Java庫在PDF文檔中批量替換文字,包括替換特定文字的所有實(shí)例、第一個實(shí)例以及使用正則表達(dá)式,同時,探討了可能遇到的問題及其解決方案,需要的朋友可以參考下
    2024-09-09
  • SpringAOP中的通知Advice詳解

    SpringAOP中的通知Advice詳解

    這篇文章主要介紹了SpringAOP中的通知Advice詳解,Spring 的 AOP 功能中一個關(guān)鍵概念是通知Advice與切點(diǎn)Pointcut表達(dá)式相關(guān)聯(lián)在特定節(jié)點(diǎn)織入一些邏輯,Spring 提供了五種類型的通知,需要的朋友可以參考下
    2023-08-08
  • SpringSecurity 認(rèn)證、注銷、權(quán)限控制功能(注銷、記住密碼、自定義登入頁)

    SpringSecurity 認(rèn)證、注銷、權(quán)限控制功能(注銷、記住密碼、自定義登入頁)

    SpringSecurity是一個強(qiáng)大的Java框架,用于保護(hù)應(yīng)用程序的安全性,它提供了一套全面的安全解決方案,本文給大家介紹SpringSecurity認(rèn)證、注銷、權(quán)限控制和注銷、記住密碼、自定義登入頁等知識總結(jié),感興趣的朋友一起看看吧
    2025-03-03

最新評論

会理县| 延边| 古浪县| 高淳县| 攀枝花市| 余干县| 岳池县| 都匀市| 从化市| 田阳县| 蚌埠市| 开远市| 桂阳县| 托克托县| 恭城| 达日县| 富蕴县| 隆昌县| 光山县| 嘉善县| 西乌珠穆沁旗| 临沭县| 吐鲁番市| 元氏县| 延长县| 绍兴市| 通化县| 淳化县| 清苑县| 永登县| 惠东县| 北川| 正镶白旗| 汕头市| 隆回县| 武城县| 石城县| 沂南县| 阿拉善右旗| 佛教| 南涧|