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

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

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

Java 多線程方法詳解

start

start方法 啟動線程 在start方法中調(diào)用start0方法,而start0是一個本地方法,其底層是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方法時會在當(dāng)前線程中執(zhí)行run方法,并不會啟動新線程。

在這里插入圖片描述

yield

yield方法線程讓步暫停當(dāng)前線程的執(zhí)行,并讓步于其他同優(yōu)先級的線程,讓其他線程先執(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)會讓其他相同優(yōu)先級或者是更高優(yōu)先級的線程來獲取執(zhí)行權(quán),要是沒有更高優(yōu)先級的線程,會繼續(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),會讓出CPU的執(zhí)行權(quán),當(dāng)線程被重新喚醒時,會由阻塞狀態(tài)進(jìn)入到就緒狀態(tài),等待CPU的使用權(quán)

方法介紹:

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

在這里插入圖片描述

Interrupt

代碼示例:

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

Interrupt方法在Thread類中,是一個普通方法,可以通過對象來調(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í)行用戶級任務(wù),一般創(chuàng)建的線程都是用戶線程,守護(hù)線程也叫做“后臺線程”服務(wù)于用戶線程,一般就是用來執(zhí)行后臺任務(wù),例如:垃圾回收就是由專門線程來處理的,負(fù)責(zé)垃圾回收的線程就是守護(hù)線程。

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

  • 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é)束,子線程同時結(jié)束

在這里插入圖片描述

Priority

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

方法介紹

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

優(yōu)先級范圍

設(shè)置Java線程的優(yōu)先級,最小值為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)先級并不絕對,所控制的是執(zhí)行的機(jī)會,優(yōu)先級高的線程執(zhí)行的概率是比較大,而優(yōu)先級低的線程也并不是沒有機(jī)會,只是執(zhí)行的概率會低一些。

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

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

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

代碼示例:

public class ThreadMethod05 {
    public static void main(String[] args) {
        T5 t5 = new T5();
        t5.setPriority(10);//設(shè)置優(yōu)先級為10
        int priority = t5.getPriority();//獲取優(yōu)先級
        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ì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Java判斷ip是否為IPV4或IPV6地址的多種方式

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

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

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

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

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

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

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

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

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

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

    debug模式遲遲不能啟動問題及解決

    在使用Debug模式進(jìn)行代碼測試時,由于設(shè)置了過多的斷點(diǎn),導(dǎo)致程序加載緩慢甚至無法啟動,解決此問題的方法是取消不必要的斷點(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)識符,就像自然界中雪花一般沒有相同的雪花,本文和大家分享了一個雪花算法工具類,需要的可以收藏一下
    2023-05-05
  • RabbitMQ 實(shí)現(xiàn)延遲隊(duì)列的兩種方式詳解

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

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

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

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

最新評論

沙湾县| 龙山县| 台安县| 南川市| 青州市| 新疆| 大埔县| 安丘市| 扎赉特旗| 航空| 马龙县| 昭平县| 宝兴县| 宽城| 鄄城县| 太保市| 柳林县| 宁南县| 额尔古纳市| 台前县| 寿光市| 民乐县| 南安市| 绥芬河市| 嘉兴市| 神木县| 潞城市| 勃利县| 阜宁县| 泸溪县| 柘荣县| 墨玉县| 东安县| 天台县| 松阳县| 岑巩县| 阿巴嘎旗| 孟津县| 海南省| 五原县| 兴化市|