亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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資源,讓給誰(shuí),是有系統(tǒng)決定的,系統(tǒng)會(huì)讓其他相同優(yōu)先級(jí)或者是更高優(yōu)先級(jí)的線程來(lái)獲取執(zhí)行權(quán),要是沒(méi)有更高優(yōu)先級(jí)的線程,會(huì)繼續(xù)執(zhí)行原來(lái)的線程。

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異常,來(lái)停止掉中斷。如果當(dāng)前處于運(yùn)行狀態(tài),調(diào)用interrupt方法,線程會(huì)繼續(xù)執(zhí)行,直到發(fā)生sleep、join、wait等方法的調(diào)用,才會(huì)進(jìn)入阻塞。

Interrupt方法在Thread類中,是一個(gè)普通方法,可以通過(guò)對(duì)象來(lái)調(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ù)于用戶線程,一般就是用來(lái)執(zhí)行后臺(tái)任務(wù),例如:垃圾回收就是由專門線程來(lái)處理的,負(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) {//無(wú)限循環(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í),就是用來(lái)指導(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í)低的線程也并不是沒(méi)有機(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í)是用來(lái)指導(dǎo)JVM層面優(yōu)先哪個(gè)線程執(zhí)行,最終執(zhí)行順序還是需要操作系統(tǒng)來(lái)指定。

4. 注意:代碼最好不要依賴于優(yōu)先級(jí)線程,有可能會(huì)造成問(wèn)題,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é)

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

 

相關(guān)文章

  • java基于odbc連接oracle的實(shí)現(xiàn)方法

    java基于odbc連接oracle的實(shí)現(xiàn)方法

    這篇文章主要介紹了java基于odbc連接oracle的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了連接操作的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-09-09
  • springboot熱部署知識(shí)點(diǎn)總結(jié)

    springboot熱部署知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于springboot熱部署的知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • 詳解SpringBoot中Controller接收對(duì)象列表實(shí)現(xiàn)

    詳解SpringBoot中Controller接收對(duì)象列表實(shí)現(xiàn)

    這篇文章主要介紹了詳解SpringBoot中Controller接收對(duì)象列表實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java線程之join方法的使用介紹

    java線程之join方法的使用介紹

    本篇文章介紹了,java線程之join方法的使用分析,需要的朋友參考下
    2013-05-05
  • JavaCV實(shí)現(xiàn)人臉檢測(cè)功能

    JavaCV實(shí)現(xiàn)人臉檢測(cè)功能

    這篇文章主要為大家詳細(xì)介紹了JavaCV實(shí)現(xiàn)人臉檢測(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java的“Goto”與標(biāo)簽及使用詳解

    Java的“Goto”與標(biāo)簽及使用詳解

    goto在Java中是一個(gè)保留字,但在語(yǔ)言中并沒(méi)有用到它;Java沒(méi)有g(shù)oto。接下來(lái)通過(guò)本文給大家介紹Java的“Goto”與標(biāo)簽,感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • Java Servlet請(qǐng)求重定向的方法

    Java Servlet請(qǐng)求重定向的方法

    這篇文章主要介紹了使用Java Servlet請(qǐng)求重定向的方法,幫助大家更好的理解和學(xué)習(xí)Java Servlet的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-11-11
  • 解決阿里代碼規(guī)范檢測(cè)中方法缺少javadoc注釋的問(wèn)題

    解決阿里代碼規(guī)范檢測(cè)中方法缺少javadoc注釋的問(wèn)題

    這篇文章主要介紹了解決阿里代碼規(guī)范檢測(cè)中方法缺少javadoc注釋的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java網(wǎng)絡(luò)爬蟲連接超時(shí)解決實(shí)例代碼

    java網(wǎng)絡(luò)爬蟲連接超時(shí)解決實(shí)例代碼

    這篇文章主要介紹了java網(wǎng)絡(luò)爬蟲連接超時(shí)解決的問(wèn)題,分享了一則使用httpclient解決連接超時(shí)的Java爬蟲實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 詳解Spring Boot 項(xiàng)目啟動(dòng)時(shí)執(zhí)行特定方法

    詳解Spring Boot 項(xiàng)目啟動(dòng)時(shí)執(zhí)行特定方法

    這篇文章主要介紹了詳解Spring Boot 項(xiàng)目啟動(dòng)時(shí)執(zhí)行特定方法,Springboot給我們提供了兩種“開機(jī)啟動(dòng)”某些方法的方式:ApplicationRunner和CommandLineRunner。感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論