Java程式語言中sleep()和yield()的區別

2021-01-11 51CTO
Java程式語言中sleep()和yield()的區別

Java程式語言在我們使用的時候需要注意很多的東西,下面我們就看看如何才能將sleep()和yield()的區別開?希望大家有所幫助。

作者:佚名來源:網際網路|2010-03-17 18:38

Java程式語言在使用中有很多需要我們學習的,下面我們就來看看sleep()和yield()的區別之間的區別,希望大家在詳細學習中有所收穫。只有在不斷的學習才能更好的使用。

1) sleep()使當前線程進入停滯狀態,所以執行sleep()的線程在指定的時間內肯定不會執行;yield()只是使當前線程重新回到可執行狀態,所以執行yield()的線程有可能在進入到可執行狀態後馬上又被執行。

2) sleep()可使優先級低的線程得到執行的機會,當然也可以讓同優先級和高優先級的線程有執行的機會;yield()只能使同優先級的線程有執行的機會。

class TestThreadMethod extends Thread{  public static int shareVar = 0;  public TestThreadMethod(String name){  super(name);  }  public void run(){  for(int i=0; i<4; i++){  System.out.print(Thread.currentThread().getName());  System.out.println(" : " + i);  //Thread.yield(); (1)  /* (2) */  try{  Thread.sleep(3000);  }  catch(InterruptedException e){  System.out.println("Interrupted");  }}}  }  public class TestThread{  public static void main(String[] args){  TestThreadMethod t1 = new TestThreadMethod("t1");  TestThreadMethod t2 = new TestThreadMethod("t2");  t1.setPriority(Thread.MAX_PRIORITY);  t2.setPriority(Thread.MIN_PRIORITY);  t1.start();  t2.start();  }  } 

運行結果為:

t1 : 0  t1 : 1  t2 : 0  t1 : 2  t2 : 1  t1 : 3  t2 : 2  t2 : 3 

由結果可見,通過sleep()可使優先級較低的線程有執行的機會。注釋掉代碼(2),並去掉代碼(1)的注釋,結果為:

t1 : 0  t1 : 1  t1 : 2  t1 : 3  t2 : 0  t2 : 1  t2 : 2  t2 : 3 

可見,調用yield(),不同優先級的線程永遠不會得到執行機會。

以上就是對Java程式語言的相關介紹,希望大家有所幫助。

【編輯推薦】

初學Java多線程:用Thread類創建線程 初學Java多線程:線程簡介 深入淺出Java多線程程序設計 初學Java多線程:使用Runnable接口創建線程 Java多線程如何才能協調好生產和消費的關係

【責任編輯:

張浩

TEL:(010)68476606】

點讚 0

相關焦點

  • Java高級程式設計師須知的並發編程知識
    並發編程簡介並發編程式Java語言的重要特性之一,當然也是最難以掌握的內容。編寫可靠的並發程序是一項不小的挑戰。但是,作為程式設計師的我們,要變得更有價值,就需要啃一些硬骨頭了。因此,理解並發編程的基礎理論和編程實踐,讓自己變得更值錢吧。
  • 世界排行第一的程式語言:java迎來25歲生日
    作為全球排名第一的程式語言,本周末Java將迎來 25 歲生日。Java起源於 1991 年的「 Oak」項目,由James Gosling領導。面向對象的Java以其「一次編寫,隨處運行」的可移植性而聞名,因為Java虛擬機支持多種硬體平臺和作業系統以及Java applet可以從網頁上運行。
  • Python與Java:你應該學習哪種語言,他們有什麼區別?
    Python與Java:你應該學習哪種語言,他們有什麼區別? 在企業招聘中, Python和Java經常是需求比較大的程式語言。這兩種編程功能強大,靈活且面向對象的語言,通常在組織中和各種其他設置中使用。
  • 跟我學java編程—認識java語言的字符類型
    Java語言提供了一種char數據類型,可以滿足存儲單個字符的需要。Java語言中,char佔2個字節的存儲空間,即可以存儲英文字符,也可以存儲單個漢字,一個漢字編碼也佔2個字節的存儲空間。char變量可按如下方式聲明:char code='a';任意單個字符,加單引號。
  • 讓你徹底明白yield語法糖的用法和原理及在C 函數式編程中的作用
    如果大家讀過dapper源碼,你會發現這內部有很多方法都用到了yield關鍵詞,那yield到底是用來幹嘛的,能不能拿掉,拿掉與不拿掉有多大的差別,首先上一段dapper中精簡後的Query方法,先讓大家眼見為實。
  • 跟我學java編程—Java邏輯運算符
    在數學中,表示一個數值的範圍時,經常用不等式來表述。例如:假設一個數值取值範圍為0到100,設該數值為x,不等式0<x<100給出了x的取值範圍,在Java程序語言中,邏輯運算符可以實現類似數學中的不等式。下表列出了Java語言支持的邏輯運算符,表中假設布爾變量A為真,變量B為假。
  • 跟我學java編程—理解Java語言的抽象與對象
    面向對象編程思想的一個基本方法就是抽象。抽象是從眾多的同類事物中抽取出具有共同特徵的過程及方法。類是抽象出來的事物,現實生活中並不存在,例如水果,水果是人們賦予具有蘋果、香蕉、葡萄等共同特點的名稱,不單指某一事物;對象是指具體的實物或概念,例如蘋果、香蕉、葡萄等對象是實物,而一項政策可能就是一個概念性的對象了,在現實生活中,萬事萬物皆對象,面向對象編程就是模擬現實生活中的一個個對象來編程的。
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    TIOBE程式語言指數排行榜,Java仍然排名前三位。TIOBE編程排行榜根據全球工程師、課程和搜尋引擎數量為指數得出,在一定程度上反映了程式語言的發展趨勢。程式語言排行榜目前很多軟體都是用Java寫的,新出的系統和函數庫為了市場,也會儘量和Java兼容或者提供Java
  • Unity3d教程C-sharp實現Coroutines&Yield
    Unity3D教程:c#腳本yield的用法 Coroutines & Yield是Unity3D編程中重要的概念,它可以實現將一段程序延遲執行或者將其各個部分分布在一個時間段內連續執行,但是在Javascript與C#中實現Coroutines & Yield,
  • Java編程中基礎反射詳細解析
    類加載器負責加載所有的類,系統為所有加載到內存中的類生成一個java.lang.Class 的實例。反射Java反射就是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;並且能改變它的屬性。
  • 理解yield和生成器
    迭代當你建立了一個列表,你可以逐個地訪問這個列表的元素,而這個訪問的過程叫做迭代(iteration)代碼中的mylist就是一個可迭代對象(iterable),當你使用列表生成式時,你就創建了一個list,同時也創建了一個可迭代對象:凡是能使用for...in...語句的對象,都叫做可迭代對象,例如:list、string、文件等等
  • 跟我學java編程—認識java的整數類型
    Java語言中,基本的整型數據類型有byte、short、int、long四種類型,用於需要不同存儲空間的數據使用。整型有正整數和負整數之分,在Java語言中,規定整型的最高位為符號位,最高位為「0」表示正數,最高位為「1」表示負數,其它位表示數值。因此整型類型的數據能夠表示的最小值為:-2n-1 —2n-1-1(n為該類型所佔存儲空間的二進位位數)。
  • Python能否超越Java成為「邁入未來」的程式語言
    程式語言領域Python成為了一個耀眼的新星,Python崛起的原因與其本身特點有關,也許它是更加符合開發者的習慣和口味。現在有一種聲音說Python將會超越Java成全球最流行程式語言,你又是怎麼認為的呢?
  • 三分鐘看懂Python和Java的區別
    隨著人工智慧的火爆,Python和Java一直在各種流行程式語言中名列前茅。其實Java和Python有些相似,因為很多程式語言之間是互通的。Java現在還是第一,不知道Python未來會不會超越Java,但是現在有些人不明白Python和Java的區別。
  • 淺談Java中的幾種隨機數
    眾所周知,隨機數是任何一種程式語言最基本的特徵之一。而生成隨機數的基本方式也是相同的:產生一個0到1之間的隨機數。看似簡單,但有時我們也會忽略了一些有趣的功能。我們從書本上學到什麼?最明顯的,也是直觀的方式,在Java中生成隨機數隻要簡單的調用:java.lang.Math.random() 在所有其他語言中,生成隨機數就像是使用Math工具類,如abs, pow, floor, sqrt和其他數學函數。大多數人通過書籍、教程和課程來了解這個類。一個簡單的例子:從0.0到1.0之間可以生成一個雙精度浮點數。
  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    但是java是一門面向對象的高級語言,它不僅語法非常複雜,抽象程度也非常高,並不能直接運行在計算機硬體機器上。 Java虛擬機(Java Virtual Machine 簡稱JVM)是運行所有Java程序的抽象計算機,是Java語言的運行環境。
  • 提升java編程性能優化知識 程式設計師必看這幾點
    對於學習java的學子也是如此,那麼java程式設計師如何提高編程性能呢,有哪些小知識或者技巧呢,怎麼樣才能在編程性能優化方面有所提升呢?  1.儘量在合適的場合使用單例  使用單例可以減輕加載的負擔,縮短加載的時間,提高加載的效率,但並不是所有地方都適用於單例,簡單來說,單例主要適用於以下三個方面:
  • 2021發展前景好的程式語言,Python、Java上榜,第一實至名歸
    而且,每年,我們都會看到這些程式語言的排名如何根據它們在開發人員中的需求和受歡迎程度而變化。同時,您需要了解所有最新的程式語言趨勢和索引,以保持與技術市場的相關性。特別是,強烈要求初學者在選擇特定的程式語言之前,先考慮幾個關鍵方面,例如需求和受歡迎程度,工作機會,應用程式等。 1.
  • 你知道java反射機制中class.forName和classloader的區別嗎?
    趁此機會總結一下,正好看到面試中還經常問到。一、類加載機制上面兩種加載類的方式說到底還是為了加載一個java類,因此需要先對類加載的過程進行一個簡單的了解。(3)初始化:在虛擬機中根據class文件進行初始化。(4)使用:這個過程大家都明白。(5)卸載:使用完了,java虛擬機進行清理。對於class.forName和classloader來說針對的就是第一個過程,也就是加載過程。
  • Java中volatile關鍵字概覽
    案例演示public class MyThread extends Thread {// 定義成員變量private boolean flag = false ;public boolean isFlag() { return flag;}@Overridepublic void run() {try {Thread.sleep(1000);} catch (InterruptedException