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

Java線(xiàn)程中的Thread.yield()詳細(xì)解析

 更新時(shí)間:2023年11月29日 08:30:57   作者:安然望川海  
這篇文章主要介紹了Java線(xiàn)程中的Thread.yield()詳細(xì)解析,yield()讓當(dāng)前線(xiàn)程從運(yùn)行狀態(tài)?轉(zhuǎn)為?就緒狀態(tài),以允許具有相同優(yōu)先級(jí)的其他線(xiàn)程獲得運(yùn)行機(jī)會(huì),需要的朋友可以參考下

(1)線(xiàn)程運(yùn)行狀態(tài)轉(zhuǎn)換

在這里插入圖片描述

新建狀態(tài)(New):新創(chuàng)建了一個(gè)線(xiàn)程對(duì)象。

就緒狀態(tài)(可執(zhí)行狀態(tài),Runnable):線(xiàn)程對(duì)象創(chuàng)建后,其他線(xiàn)程調(diào)用了該對(duì)象的start()方法。該狀態(tài)的線(xiàn)程位于可運(yùn)行線(xiàn)程池中,變得可運(yùn)行,等待獲取CPU的使用權(quán)。

運(yùn)行狀態(tài)(運(yùn)行狀態(tài),Running):就緒狀態(tài)的線(xiàn)程獲取了CPU,執(zhí)行程序代碼。

阻塞狀態(tài)(Blocked):阻塞狀態(tài)是線(xiàn)程因?yàn)槟撤N原因放棄CPU使用權(quán),暫時(shí)停止運(yùn)行。直到線(xiàn)程進(jìn)入就緒狀態(tài),才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。

阻塞的情況分三種:

(1) 等待阻塞:運(yùn)行的線(xiàn)程執(zhí)行wait()方法,該線(xiàn)程進(jìn)入等待池中                   

(2) 同步阻塞:運(yùn)行的線(xiàn)程在獲取對(duì)象的同步鎖時(shí),若該同步鎖被別的線(xiàn)程占用,則該線(xiàn)程進(jìn)入鎖池中

(3) 其他阻塞:運(yùn)行的線(xiàn)程執(zhí)行sleep()或join()方法,或者發(fā)出了I/O請(qǐng)求時(shí),該線(xiàn)程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線(xiàn)程終止或者超時(shí)、或者I/O處理完畢時(shí),線(xiàn)程重新轉(zhuǎn)入就緒狀態(tài)。

死亡狀態(tài)(Dead):線(xiàn)程執(zhí)行完了或者因異常退出了run()方法,該線(xiàn)程結(jié)束生命周期。

(2)理解線(xiàn)程的優(yōu)先權(quán)

接下來(lái),理解線(xiàn)程優(yōu)先級(jí)是很重要的一步,尤其是了解 yield() 函數(shù)的工作過(guò)程:

1、記住當(dāng)線(xiàn)程的優(yōu)先級(jí)沒(méi)有指定時(shí),所有線(xiàn)程都攜帶普通優(yōu)先級(jí)。

2、優(yōu)先級(jí)可以用從 1 到 10 的范圍指定。10 表示最高優(yōu)先級(jí),1 表示最低優(yōu)先級(jí),5 是普通優(yōu)先級(jí)。

3、記住優(yōu)先級(jí)最高的線(xiàn)程在執(zhí)行時(shí)被給予優(yōu)先。但是不能保證線(xiàn)程在啟動(dòng)時(shí)就進(jìn)入運(yùn)行狀態(tài)。

4、與在線(xiàn)程池中等待運(yùn)行機(jī)會(huì)的線(xiàn)程相比,當(dāng)前正在運(yùn)行的線(xiàn)程可能總是擁有更高的優(yōu)先級(jí)。

5、由調(diào)度程序決定哪一個(gè)線(xiàn)程被執(zhí)行。

6、t.setPriority() 用來(lái)設(shè)定線(xiàn)程的優(yōu)先級(jí)。

7、記住在線(xiàn)程 start() 方法被調(diào)用之前,線(xiàn)程的優(yōu)先級(jí)應(yīng)該被設(shè)定。

8、你可以使用常量,如 MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY 來(lái)設(shè)定優(yōu)先級(jí)。

(3)Thread.yield

方法作用: 讓當(dāng)前線(xiàn)程從運(yùn)行狀態(tài) 轉(zhuǎn)為 就緒狀態(tài),以允許具有相同優(yōu)先級(jí)的其他線(xiàn)程獲得運(yùn)行機(jī)會(huì)。

(4)代碼示例

public class Yield {
    public static void main(String[] args) {
        Thread[] threads = new Thread[2];
        for (int i=0;i<2;i++){
            int index=i;
            threads[i] = new Thread(new Runnable() {
                @Override
                public void run() {
                        System.out.println("threads"+index+":"+1);
                        Thread.yield();
                        System.out.println("threads"+index+":"+2);
                }
            });
            threads[i].start();
        }
    }
}

多次運(yùn)行會(huì)如下結(jié)果:

threads0:1
threads1:1
threads0:2
threads1:2

或者

threads0:1
threads0:2
threads1:1
threads1:2

結(jié)論:無(wú)法保證yield()達(dá)到讓步目的,因?yàn)樽尣降木€(xiàn)程還有可能被線(xiàn)程調(diào)度程序再次選中。

(5)總結(jié)

1、yield 是一個(gè)靜態(tài)的原生(native)方法。

2、yield 告訴當(dāng)前正在執(zhí)行的線(xiàn)程把運(yùn)行機(jī)會(huì)交給線(xiàn)程池中擁有相同優(yōu)先級(jí)的線(xiàn)程。

3、yield 不能保證使得當(dāng)前正在運(yùn)行的線(xiàn)程迅速轉(zhuǎn)換到可運(yùn)行的狀態(tài)。

4、它僅能使一個(gè)線(xiàn)程從運(yùn)行狀態(tài)轉(zhuǎn)到可運(yùn)行狀態(tài),而不是等待或阻塞狀態(tài)。

5、無(wú)法保證yield()達(dá)到讓步目的,因?yàn)樽尣降木€(xiàn)程還有可能被線(xiàn)程調(diào)度程序再次選中。

到此這篇關(guān)于Java線(xiàn)程中的Thread.yield()詳細(xì)解析的文章就介紹到這了,更多相關(guān)Thread.yield()詳細(xì)解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?EE實(shí)現(xiàn)用戶(hù)后臺(tái)管理系統(tǒng)

    Java?EE實(shí)現(xiàn)用戶(hù)后臺(tái)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java?EE實(shí)現(xiàn)用戶(hù)后臺(tái)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java后端調(diào)用微信支付和支付寶支付的詳細(xì)步驟

    Java后端調(diào)用微信支付和支付寶支付的詳細(xì)步驟

    這篇文章主要介紹了Java后端如何調(diào)用微信支付和支付寶支付,涵蓋了基本概念、配置步驟、代碼示例以及注意事項(xiàng),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • SpringBoot集成AOP的代碼示例

    SpringBoot集成AOP的代碼示例

    AOP是一種編程范式,它旨在將橫切關(guān)注點(diǎn)(cross-cutting concerns)從應(yīng)用程序的業(yè)務(wù)邏輯中分離出來(lái),橫切關(guān)注點(diǎn)是那些在多個(gè)模塊中重復(fù)出現(xiàn)的功能,如日志記錄、性能監(jiān)控、事務(wù)管理、安全控制等,本文介紹了Spring Boot如何集成AOP,需要的朋友可以參考下
    2024-09-09
  • Spring Boot高效數(shù)據(jù)聚合之道深入講解

    Spring Boot高效數(shù)據(jù)聚合之道深入講解

    這篇文章主要給大家介紹了關(guān)于Spring Boot高效數(shù)據(jù)聚合之道的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • JAVA簡(jiǎn)單工廠(chǎng)模式(從現(xiàn)實(shí)生活角度理解代碼原理)

    JAVA簡(jiǎn)單工廠(chǎng)模式(從現(xiàn)實(shí)生活角度理解代碼原理)

    本文主要介紹了JAVA簡(jiǎn)單工廠(chǎng)模式(從現(xiàn)實(shí)生活角度理解代碼原理)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • MyBatis攔截器的實(shí)現(xiàn)原理

    MyBatis攔截器的實(shí)現(xiàn)原理

    這篇文章主要介紹了MyBatis攔截器的實(shí)現(xiàn)原理,Mybatis攔截器并不是每個(gè)對(duì)象里面的方法都可以被攔截的,其具體內(nèi)容感興趣的小伙伴課題參考一下下面文章內(nèi)容
    2022-08-08
  • 關(guān)于WeakhashMap與HashMap之間的區(qū)別和聯(lián)系

    關(guān)于WeakhashMap與HashMap之間的區(qū)別和聯(lián)系

    這篇文章主要介紹了關(guān)于WeakhashMap與HashMap之間的區(qū)別和聯(lián)系,WeakHashMap從名字可以得知主要和Map有關(guān),不過(guò)還有一個(gè)Weak,我們就更能自然而然的想到這里面還牽扯到一種弱引用結(jié)構(gòu),因此想要徹底搞懂,我們還需要知道四種引用,需要的朋友可以參考下
    2023-09-09
  • java時(shí)間 java.util.Calendar深入分析

    java時(shí)間 java.util.Calendar深入分析

    這篇文章主要介紹了java時(shí)間 java.util.Calendar深入分析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 深入淺析java中finally的用法

    深入淺析java中finally的用法

    finally自己由關(guān)鍵字finally和后面的finally塊組成。這篇文章重點(diǎn)給大家介紹java中finally的用法,需要的朋友參考下吧
    2018-06-06
  • java爬取并下載酷狗TOP500歌曲的方法

    java爬取并下載酷狗TOP500歌曲的方法

    這篇文章主要介紹了java爬取并下載酷狗TOP500歌曲的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01

最新評(píng)論