睡覺(sleep)和在java中等待(wait in java)的區別

Sleep和wait是Java中用於多執行緒處理的兩種方法。sleep方法屬於Thread類,而wait方法來自Object類。Java中sleep和wait的關鍵區別在於,sleep用於在指定的毫秒數內暫停當前執行緒的執行,而wait方法用於使當前執行緒等待,直到另一個執行緒呼叫物件的notify或notifyAll方法。...

關鍵區別——java中的休眠與等待

Sleep和wait是Java中用於多線程處理的兩種方法。sleep方法屬於Thread類,而wait方法來自Object類。Java中sleep和wait的關鍵區別在於,sleep用於在指定的毫秒數內暫停當前線程的執行,而wait方法用於使當前線程等待,直到另一個線程調用對象的notify或notifyAll方法。

線程是操作系統中最小的處理單元。它是一個程序中的單一順序控制流。線程是輕量級的。多線程是同時運行多個線程的機制。Java等編程語言支持多線程。多線程處理有很多優點,因為它允許同時運行多個線程,並且線程之間相互獨立。Java中有一些方法可以用於多線程處理。他們中的兩個正在睡覺等待。

目錄

1. 概述和主要區別
2. 什麼是Java睡眠
3. Java中的等待是什麼
4. Java中sleep和wait的相似性
5. 並排比較——在Java中以表格形式顯示sleep和wait
6. 摘要

什麼是在爪哇睡覺(sleep in java)?

操作系統中運行多個進程。進程是正在執行的程序。每個進程可以有多個線程,並且在這些線程之間發生上下文切換。在Java中,有兩種創建線程的方法。這是通過擴展thread類或實現可運行接口來實現的。Thread類具有用於在線程上創建和執行操作的構造函數和方法。Thread類擴展對象類並實現可運行接口。可運行接口應該由任何一個類實現,這些類的實例將由線程執行。當線程執行時,應該執行的代碼寫在run方法中。應該運行的線程由線程調度程序選擇。在一個進程中只有一個線程運行。

一條線要經過幾個階段。在創建了Thread類的對象之後,程序員可以調用start方法。在調用該方法之前,線程被稱為處於新狀態。線程調度程序選擇要運行的線程。如果線程調度程序尚未選擇線程,但調用了start方法,則線程處於可運行狀態。在線程調度程序選擇要執行的線程之後,它將轉換到運行狀態。如果線程是活動的,但當前沒有資格運行,則它處於不可運行或阻塞狀態。方法完成後,轉到線程結束狀態。這些是線程生命週期的主要階段。

thread類中有多種方法可用於執行不同的任務。睡眠方法用於使該方法睡眠一段特定的時間。sleep方法的語法是public void sleep(long millises)throws InterruptedException。它使當前正在執行的線程在指定的毫秒數內臨時停止執行。如果當前線程的當前狀態被清除,則拋出另一個線程的當前狀態。

睡覺(sleep)和在java中等待(wait in java)的區別

圖01:sleep方法的Java程序

根據上面的程序,run方法包含應該執行的代碼。在主程序中,將創建ExampleThread1的兩個對象,並對它們調用start方法。這將允許在run方法內運行代碼。一次只能執行一個線程。用線。休眠(1000);將允許第一個線程終止執行1000毫秒。當一個線程處於休眠狀態時,線程調度程序將啟動另一個線程。

什麼是在java中等待(wait in java)?

多個線程可能訪問一個共享資源。它會導致產生錯誤的輸出。線程同步只能用於使一個線程訪問共享資源。假設如下情況。如果有兩個線程t1和t2,則t1開始將值保存到名為Text1.txt的文本文件中。當t1返回時,這些值將用於其他計算。如果t2在t1返回之前開始,t2可以更改t1保存的值。這可能導致t1提供錯誤的輸出。在同步的幫助下,當t1開始使用Text1.txt文件時,該文件可以被鎖定,因此只有t1可以訪問它。t2無法更改它,直到t1釋放了訪問該文本文件的鎖。任務完成後,t1可以釋放鎖。鎖也被稱為監視器。

線程同步可以通過線程間的通信來實現。關鍵部分是訪問共享資源的代碼段。在線程間通信中,一個線程在其臨界區暫停運行,另一個線程允許進入同一個臨界區執行。它是使用wait、notify和notifyAll方法實現的。它們屬於對象類。wait方法用於允許當前線程釋放鎖,並等待另一個線程調用對象的notify或notifyAll方法。notify方法用於喚醒等待鎖的單個線程。所有等待喚醒的線程都是notify鎖。

睡覺(sleep)和在java中等待(wait in java)的區別

圖02:計算器類

 

睡覺(sleep)和在java中等待(wait in java)的區別

圖03:主要方法

Calculator類擴展了線程。synchronized塊在run方法內。for循環和notify方法在synchronized塊內。在main方法中,創建一個線程的實例,並對該實例調用start方法。main方法將等待線程發出通知。在執行程序時,main方法一直等到run方法的整個執行過程,然後等待notify方法。調用notify方法後,main方法停止等待並開始執行其餘代碼。Main正在等待計算器線程完成。最後,輸出求和結果。

如果其他線程沒有完成,那麼它將在等待另一個線程,因為它沒有完成下面的一個輸出。

計算器t1=新計算器();

t1。啟動();

System.out.println(t1.總和);

什麼是java中sleep與wait的相似性(the similarity between sleep and wait in java)?

  • sleep和wait都是在Java中實現多線程時可以使用的方法

睡覺(sleep)和在java中等待(wait in java)的區別

Java中的睡眠與等待
sleep方法使當前線程暫停執行指定的毫秒數,這取決於系統計時器和調度程序的精度和準確性。 wait方法使當前線程等待,直到另一個線程調用對象的notify或notifyAll方法。
與鎖關聯
sleep方法不會在同步期間釋放對象的鎖。 wait方法在同步期間釋放鎖。
執行方法
sleep方法在當前線程上執行。 對對象調用wait方法。
關聯類
sleep是線程類的一種方法。 wait是對象類的一種方法。
完成
睡眠過程在指定的時間量結束後完成。 wait方法被調用notify或notifyAll方法中斷。

總結 - 睡覺(sleep) vs. 在java中等待(wait in java)

操作系統上運行多個進程。每個進程可以有多個線程。線程是操作系統中最小的處理單元。Java編程語言支持多線程。它允許同時運行多個線程。sleep和wait是實現多線程時可以使用的兩種方法。Java中sleep和wait的區別在於,sleep用於在指定的毫秒數內暫停當前線程的執行,而wait方法用於使當前線程等待,直到另一個線程調用對象的notify或notifyAll方法。

引用
  • 發表於 2020-10-19 03:04
  • 閱讀 ( 48 )
  • 分類:科技

你可能感興趣的文章

扔(throw)和丟擲java(throws in java)的區別

...用於異常處理的關鍵字。 扔(throw)和丟擲java(throws in java)的區別 Java中的throw vs throws throw是Java中用來顯式丟擲異常的關鍵字。 throws是Java中用來宣告異常的關鍵字。 多重例外 throw不能有多個異常。 丟擲可能有多個...

  • 發佈於 2020-09-21 19:02
  • 閲讀 ( 54 )

字串緩衝區(string stringbuffer)和java中的stringbuilder(stringbuilder in java)的區別

...區(string stringbuffer)和java中的stringbuilder(stringbuilder in java)的區別 String vs StringBuffer vs StringBuilder 字串 string是一個Java類,用於建立string型別的物件,string是一個字元序列。 字串緩衝區 StringBuffer是一個Java類,用於建立...

  • 發佈於 2020-10-02 19:22
  • 閲讀 ( 45 )

包裹(package)和java介面(interface in java)的區別

...它有助於歸檔抽象。 包裹(package)和java介面(interface in java)的區別 包是一組提供訪問保護和名稱空間管理的相關類。介面是一個類似於類的引用型別,類是抽象方法的集合。包有助於有條理地對類進行分類,以便輕鬆地訪問和維...

  • 發佈於 2020-10-18 11:01
  • 閲讀 ( 52 )

等於(equals)和java中的hashcode(hashcode in java)的區別

...HashMap等集合。 等於(equals)和java中的hashcode(hashcode in java)的區別 等於Java中的hashCode equals是Java中的一個方法,它的作用類似於==運算子,後者用於測試物件標識而不是物件相等性。 hashCode是一種方法,類透過該方法隱...

  • 發佈於 2020-10-19 00:40
  • 閲讀 ( 53 )

打破(break)和在java中繼續(continue in java)的區別

... Java中的break和continue都用於更改迴圈的執行。 打破(break)和在java中繼續(continue in java)的區別 Java中的break vs continue break是一種迴圈控制結構,它使迴圈終止並將程式控制傳遞給迴圈的下一個語句。 continue是一個迴圈控...

  • 發佈於 2020-10-19 05:44
  • 閲讀 ( 63 )

包裝類(wrapper class)和java中的基元型別(primitive type in java)的區別

...類用於此轉換。本文討論了Java中包裝類和基元型別之間的區別。Java中包裝類與基元型別的關鍵區別在於,包裝類用於將原語型別轉換為物件,並將物件轉換回原語型別,而基元型別是由Java程式語言提供的預定義資料型別。 目...

  • 發佈於 2020-10-19 06:27
  • 閲讀 ( 90 )

靜止的(static)和java期末考試(final in java)的區別

...final是Java中的兩個關鍵字。本文討論Java中static和final之間的區別。Java中static和final之間的關鍵區別在於static用於定義可以獨立於類的任何物件使用的類成員,而final用於宣告常量變數或無法重寫的方法或無法繼承的類。 目錄 1. ...

  • 發佈於 2020-10-19 07:48
  • 閲讀 ( 54 )

選中的(checked)和java中的未檢查異常(unchecked exception in java)的區別

...ArrayOutOfBound異常。本文討論Java中checked和unchecked異常之間的區別。Java中checked異常和unchecked異常之間的關鍵區別在於編譯器檢查checked異常,而編譯器不檢查checked異常。 目錄 1. 概述和主要區別 2. Java中的檢查異常是什麼 3. 什麼是J...

  • 發佈於 2020-10-19 08:38
  • 閲讀 ( 62 )

變數(variables)和java中的資料字面值(data literals in java)的區別

...,“5”是資料文字。本文討論Java中變數和資料文字之間的區別。Java中變數和資料字面值的主要區別在於,變數是用符號名儲存值的保留記憶體位置,而資料字面值是表示程式設計中固定值的符號。 目錄 1.概述和主要區別 2.Java...

  • 發佈於 2020-10-19 08:52
  • 閲讀 ( 48 )

追加(append)和在python中擴充套件(extend in python)的區別

...nd和extend都是Python程式語言提供的內建函式。 追加(append)和在python中擴充套件(extend in python)的區別 Python中的append vs extend append是Python中的一個內建函式,用於將其引數作為單個元素新增到列表的末尾。 extend是Python中...

  • 發佈於 2020-10-19 10:35
  • 閲讀 ( 58 )
dws30epdl
dws30epdl

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦