關鍵區別——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。它使當前正在執行的線程在指定的毫秒數內臨時停止執行。如果當前線程的當前狀態被清除,則拋出另一個線程的當前狀態。
根據上面的程序,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鎖。
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方法。