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

你真的了解Java的多線程方法嗎

 更新時(shí)間:2022年03月29日 11:10:48   作者:WYSCODER  
這篇文章主要為大家詳細(xì)介紹了Java的多線程方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

Java 多線程方法詳解

start

start方法 啟動(dòng)線程 在start方法中調(diào)用start0方法,而start0是一個(gè)本地方法,其底層是C++實(shí)現(xiàn)的。

    public synchronized void start() {
        if (threadStatus != 0)
            throw new IllegalThreadStateException();
        group.add(this);
        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
            }
        }
    }
    private native void start0();

run

run 方法 子線程的執(zhí)行體,在其方法體中編寫線程邏輯,run方法和普通成員方法一樣,可以重復(fù)調(diào)用,當(dāng)我們單獨(dú)調(diào)用run方法時(shí)會(huì)在當(dāng)前線程中執(zhí)行run方法,并不會(huì)啟動(dòng)新線程。

在這里插入圖片描述

yield

yield方法線程讓步暫停當(dāng)前線程的執(zhí)行,并讓步于其他同優(yōu)先級(jí)的線程,讓其他線程先執(zhí)行

yield方法是Thread類中的靜態(tài)方法

public static native void yield();

特點(diǎn)

  • yield方法的讓步,能讓正在執(zhí)行的線程由“運(yùn)行狀態(tài)”進(jìn)入到“就緒狀態(tài)”,等待調(diào)度執(zhí)行。
  • yield僅僅是讓出CPU資源,讓給誰,是有系統(tǒng)決定的,系統(tǒng)會(huì)讓其他相同優(yōu)先級(jí)或者是更高優(yōu)先級(jí)的線程來獲取執(zhí)行權(quán),要是沒有更高優(yōu)先級(jí)的線程,會(huì)繼續(xù)執(zhí)行原來的線程。

join

join 方法 線程合并 暫停當(dāng)前線程的執(zhí)行,等待子線程執(zhí)行完畢再繼續(xù)執(zhí)行當(dāng)前線程,也叫做線程插隊(duì),join方法做的事情就是講并行或并發(fā)執(zhí)行的線程合并為串行執(zhí)行。

代碼示例:

public class ThreadMethod02 {
    public static void main(String[] args) throws InterruptedException {
        T2 t2 = new T2();
        t2.start();
        //主線程打印
        int count = 0;
        for (int i = 1; i <= 10; i++) {
            Thread.sleep(1000);
            System.out.println("main" + i);
            if (++count == 5) {
                t2.join();//子線程插隊(duì)
            }
        }
    }
}
class T2 extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 10; i++) {
            try {
                Thread.sleep(1000);//休眠一秒鐘
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("A" + i);
        }
    }
}

運(yùn)行結(jié)果:

在這里插入圖片描述

sleep

sleep線程休眠,在sleep期間,線程運(yùn)行狀態(tài)從運(yùn)行進(jìn)入到阻塞狀態(tài),會(huì)讓出CPU的執(zhí)行權(quán),當(dāng)線程被重新喚醒時(shí),會(huì)由阻塞狀態(tài)進(jìn)入到就緒狀態(tài),等待CPU的使用權(quán)

方法介紹:

  • sleep方法主要有兩個(gè),sleep(long millis)sleep(long millis, int nanos)兩個(gè)方法功能類似,后一個(gè)方法提供更高精度的納秒級(jí)控制。
  • sleep方法是Thread里提供的靜態(tài)方法,當(dāng)前的方法也是可以拋出InterruptedException異常,可以被Interrupt中斷掉。

在這里插入圖片描述

Interrupt

代碼示例:

Interrupt中斷線程 interrupt方法調(diào)用僅僅修改了一個(gè)中斷標(biāo)志。 如果當(dāng)前線程是可中斷的狀態(tài)(調(diào)用了sleep、join、wait等方法導(dǎo)致線程進(jìn)入阻塞狀態(tài))在其他線程中調(diào)用interrupt方法,會(huì)立即拋出一個(gè)InterruptedException異常,來停止掉中斷。如果當(dāng)前處于運(yùn)行狀態(tài),調(diào)用interrupt方法,線程會(huì)繼續(xù)執(zhí)行,直到發(fā)生sleep、join、wait等方法的調(diào)用,才會(huì)進(jìn)入阻塞。

Interrupt方法在Thread類中,是一個(gè)普通方法,可以通過對(duì)象來調(diào)用。

public class ThreadMethod03 {
    public static void main(String[] args) throws InterruptedException {
        T3 t3 = new T3();
        t3.start();
        for (int i = 0; i < 3; i++) {
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getName());
        }
        t3.interrupt();//發(fā)送中斷
    }
}
class T3 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            System.out.println("A");
        }
        try {
            System.out.println("進(jìn)行休眠");
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            System.out.println(Thread.currentThread().getName() + "被Interrupted!!!");
        }
    }
}

運(yùn)行結(jié)果:

在這里插入圖片描述

deamon

deamon 方法 守護(hù)線程 Java線程有兩種,一種是守護(hù)線程,一種是用戶線程,用戶線程一般用戶執(zhí)行用戶級(jí)任務(wù),一般創(chuàng)建的線程都是用戶線程,守護(hù)線程也叫做“后臺(tái)線程”服務(wù)于用戶線程,一般就是用來執(zhí)行后臺(tái)任務(wù),例如:垃圾回收就是由專門線程來處理的,負(fù)責(zé)垃圾回收的線程就是守護(hù)線程。

守護(hù)線程存在兩個(gè)方法

  • public final void setDaemon(boolean on)

設(shè)置守護(hù)線程,參數(shù)是true和false,true表明設(shè)置為守護(hù)線程, false,設(shè)置為非守護(hù)線程 ,默認(rèn)是false。

  • public final boolean isDaemon()

判斷是否守護(hù)線程,返回Boolean類型

代碼示例:

public class ThreadMethod04 {
    public static void main(String[] args) throws InterruptedException {
        T4 t4 = new T4();
        t4.setDaemon(true);//將子線程設(shè)置為守護(hù)線程
        t4.start();
        if (t4.isDaemon()) {//判斷是否是守護(hù)線程
            System.out.println("子線程是守護(hù)線程");
        }else {
            System.out.println("子線程不是守護(hù)線程");
        }
        for (int i = 1;i <= 5;i++) {
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getName() + i);
        }
    }
}
class T4 extends Thread {
    @Override
    public void run() {
        while (true) {//無限循環(huán)
            try {
                Thread.sleep(1000);// 休眠1s鐘
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName());
        }
    }
}

運(yùn)行結(jié)果:

主線程結(jié)束,子線程同時(shí)結(jié)束

在這里插入圖片描述

Priority

Priority線程優(yōu)先級(jí),就是用來指導(dǎo)線程執(zhí)行的優(yōu)先權(quán)

方法介紹

  • public final void setPriority(int newPriority):設(shè)置線程的優(yōu)先級(jí)
  • public final int getPriority():獲取線程的優(yōu)先級(jí)

優(yōu)先級(jí)范圍

設(shè)置Java線程的優(yōu)先級(jí),最小值為1,默認(rèn)值是5,最大值是10

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;

方法特點(diǎn)

1. 線程的優(yōu)先級(jí)并不絕對(duì),所控制的是執(zhí)行的機(jī)會(huì),優(yōu)先級(jí)高的線程執(zhí)行的概率是比較大,而優(yōu)先級(jí)低的線程也并不是沒有機(jī)會(huì),只是執(zhí)行的概率會(huì)低一些。

2. 優(yōu)先級(jí)共10個(gè)優(yōu)先級(jí),分別為1-10,數(shù)值越大,表明優(yōu)先級(jí)越高,普通的線程優(yōu)先級(jí)是5。

3. 線程的優(yōu)先級(jí)是用來指導(dǎo)JVM層面優(yōu)先哪個(gè)線程執(zhí)行,最終執(zhí)行順序還是需要操作系統(tǒng)來指定。

4. 注意:代碼最好不要依賴于優(yōu)先級(jí)線程,有可能會(huì)造成問題,Java中給定的優(yōu)先級(jí)并不一定嚴(yán)格按照給定優(yōu)先級(jí)執(zhí)行。

代碼示例:

public class ThreadMethod05 {
    public static void main(String[] args) {
        T5 t5 = new T5();
        t5.setPriority(10);//設(shè)置優(yōu)先級(jí)為10
        int priority = t5.getPriority();//獲取優(yōu)先級(jí)
        System.out.println(priority);
    }
}

class T5 extends Thread {
    @Override
    public void run() {
        System.out.println("A");
    }
}

運(yùn)行結(jié)果:

在這里插入圖片描述

總結(jié)

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

 

相關(guān)文章

  • IntelliJ?IDEA?2020.2?全家桶及以下版本激活工具大全【喜訊】

    IntelliJ?IDEA?2020.2?全家桶及以下版本激活工具大全【喜訊】

    這篇文章主要介紹了IntelliJ?IDEA?2020.2?全家桶及以下版本激活工具大全【喜訊】,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java判斷ip是否為IPV4或IPV6地址的多種方式

    Java判斷ip是否為IPV4或IPV6地址的多種方式

    本文主要介紹了Java判斷ip是否為IPV4或IPV6地址的多種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 批量將現(xiàn)有Jar包上傳到Maven私服

    批量將現(xiàn)有Jar包上傳到Maven私服

    今天小編就為大家分享一篇關(guān)于批量將現(xiàn)有Jar包上傳到Maven私服,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Spring攔截器和過濾器的區(qū)別在哪?

    Spring攔截器和過濾器的區(qū)別在哪?

    相信很多小伙伴都對(duì)Spring攔截器和過濾器的區(qū)別有疑惑,今天特地整理了本篇文章,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • 詳解Java中如何定義和訪問靜態(tài)字段和方法

    詳解Java中如何定義和訪問靜態(tài)字段和方法

    在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,我們通常使用類來創(chuàng)建對(duì)象,類中有許多成員變量和方法,它們是直接屬于對(duì)象實(shí)例的,與之對(duì)應(yīng)的還有一類成員,那就是靜態(tài)成員,本文就來和大家聊聊Java是如何定義訪問靜態(tài)成員的吧
    2023-05-05
  • 解讀@NotNull和@NonNull的區(qū)別及使用

    解讀@NotNull和@NonNull的區(qū)別及使用

    這篇文章主要介紹了解讀@NotNull和@NonNull的區(qū)別及使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-01-01
  • debug模式遲遲不能啟動(dòng)問題及解決

    debug模式遲遲不能啟動(dòng)問題及解決

    在使用Debug模式進(jìn)行代碼測(cè)試時(shí),由于設(shè)置了過多的斷點(diǎn),導(dǎo)致程序加載緩慢甚至無法啟動(dòng),解決此問題的方法是取消不必要的斷點(diǎn),通過IDE的斷點(diǎn)管理功能,檢查并移除問題斷點(diǎn),從而優(yōu)化調(diào)試效率,分享此經(jīng)驗(yàn)希望能幫助遇到相同問題的開發(fā)者
    2022-11-11
  • Java實(shí)現(xiàn)雪花算法的工具類介紹

    Java實(shí)現(xiàn)雪花算法的工具類介紹

    雪花 (SnowFlake )算法是一種分布式唯一ID生成算法,可以生成全局唯一的ID標(biāo)識(shí)符,就像自然界中雪花一般沒有相同的雪花,本文和大家分享了一個(gè)雪花算法工具類,需要的可以收藏一下
    2023-05-05
  • RabbitMQ 實(shí)現(xiàn)延遲隊(duì)列的兩種方式詳解

    RabbitMQ 實(shí)現(xiàn)延遲隊(duì)列的兩種方式詳解

    很多場(chǎng)景下我們都需要延遲隊(duì)列。這篇文章主要以RabbitMQ為例來和大家聊一聊延遲隊(duì)列的玩法。文中的代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的同學(xué)可以了解一下
    2021-12-12
  • Java中判斷對(duì)象是否相等的equals()方法使用教程

    Java中判斷對(duì)象是否相等的equals()方法使用教程

    與==運(yùn)算符響應(yīng),equals()方法也是Java中對(duì)對(duì)象進(jìn)行比較的一大方式,要特別注意二者的不同點(diǎn),這個(gè)我們?cè)谙挛闹屑磳⒅v到,接下來我們就來看一下Java中判斷對(duì)象是否相等的equals()方法使用教程
    2016-05-05

最新評(píng)論

休宁县| 辽中县| 金平| 永修县| 玉龙| 尖扎县| 大石桥市| 民权县| 乐业县| 济宁市| 青神县| 五大连池市| 余江县| 莎车县| 丹棱县| 会理县| 新闻| 自治县| 苏尼特左旗| 巩义市| 雷山县| 天峨县| 崇州市| 祁东县| 澳门| 莱阳市| 抚宁县| 江门市| 凌源市| 陕西省| 益阳市| 通城县| 酒泉市| 房山区| 都昌县| 民勤县| 文水县| 固安县| 颍上县| 醴陵市| 永顺县|