Java多線程yield心得分享
一. Thread.yield( )方法:
使當前線程從執(zhí)行狀態(tài)(運行狀態(tài))變?yōu)榭蓤?zhí)行態(tài)(就緒狀態(tài))。cpu會從眾多的可執(zhí)行態(tài)里選擇,也就是說,當前也就是剛剛的那個線程還是有可能會被再次執(zhí)行到的,并不是說一定會執(zhí)行其他線程而該線程在下一次中不會執(zhí)行到了。
Java線程中有一個Thread.yield( )方法,很多人翻譯成線程讓步。顧名思義,就是說當一個線程使用了這個方法之后,它就會把自己CPU執(zhí)行的時間讓掉,讓自己或者其它的線程運行。
打個比方:現(xiàn)在有很多人在排隊上廁所,好不容易輪到這個人上廁所了,突然這個人說:“我要和大家來個競賽,看誰先搶到廁所!”,然后所有的人在同一起跑線沖向廁所,有可能是別人搶到了,也有可能他自己有搶到了。我們還知道線程有個優(yōu)先級的問題,那么手里有優(yōu)先權的這些人就一定能搶到廁所的位置嗎? 不一定的,他們只是概率上大些,也有可能沒特權的搶到了。
例子:
package com.yield;
public class YieldTest extends Thread {
public YieldTest(String name) {
super(name);
}
@Override
public void run() {
for (int i = 1; i <= 50; i++) {
System.out.println("" + this.getName() + "-----" + i);
// 當i為30時,該線程就會把CPU時間讓掉,讓其他或者自己的線程執(zhí)行(也就是誰先搶到誰執(zhí)行)
if (i == 30) {
this.yield();
}
}
}
public static void main(String[] args) {
YieldTest yt1 = new YieldTest("張三");
YieldTest yt2 = new YieldTest("李四");
yt1.start();
yt2.start();
}
}
運行結果:
第一種情況:李四(線程)當執(zhí)行到30時會CPU時間讓掉,這時張三(線程)搶到CPU時間并執(zhí)行。

第二種情況:李四(線程)當執(zhí)行到30時會CPU時間讓掉,這時李四(線程)搶到CPU時間并執(zhí)行。

相關文章
解決idea打包成功但是resource下的文件沒有成功的問題
這篇文章主要介紹了解決idea打包成功但是resource下的文件沒有成功的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
最全JVM調(diào)優(yōu)步驟和參數(shù)及配置
這篇文章主要給大家介紹了關于JVM調(diào)優(yōu)的相關資料,JVM調(diào)優(yōu)是指對Java虛擬機(JVM)進行優(yōu)化,以提高Java程序的性能和運行效率,文中介紹的非常詳細,需要的朋友可以參考下2024-03-03
java8中的List<String>轉List<Integer>的實例代碼
這篇文章主要介紹了java8中的List<String>轉List<Integer>,轉換list列表String到列表Intger,java8提供了stream很好的進行操作,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-07-07
java 靜態(tài)工廠代替多參構造器的適用情況與優(yōu)劣
這篇文章主要介紹了java 靜態(tài)工廠代替多參構造器的優(yōu)劣,幫助大家更好的理解和使用靜態(tài)工廠方法,感興趣的朋友可以了解下2020-12-12

