文章編號:11435時間:2024-09-30人氣:
在 Java 中,
suspendThread
方法已被棄用,使用
Thread.suspend()
暫停線程也不推薦使用。原因是使用這些方法會帶來嚴重的并發問題。
本文將探討使用
suspendThread
暫停線程的潛在危險,并提供替代解決方案。
suspendThread
暫停線程時,線程將立即掛起,無論它在做什么。這會導致以下問題:
以下是一個示例,說明使用
suspendThread
暫停線程如何導致死鎖:
method1
和
method2
)都試圖獲取兩個
線程中sleep和wait的區別如下:一,首先二者的不同點:1.這兩個方法來自不同的類分別是Thread和Object。 首先對于sleep()方法,要知道該方法是屬于Thread類中的。 而wait()方法,則是屬于Object類中的。 ()方法導致了程序暫停執行指定的時間,讓出cpu該其他線程,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。 在調用sleep()方法的過程中,線程不會釋放對象鎖。 而當調用wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用notify()方法后本線程才進入對象鎖定池準備。 獲取對象鎖進入運行狀態。 3.最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。 wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用(使用范圍)比如:synchronized(x){()//或者wait()}必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常舉例說明如下:1.首先我們先看sleep中的構造函數sleep(long millis) Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and (long millis, int nanos)Causes the currently executing thread to sleep (cease execution) for the specified number of milliseconds plus the specified number of nanoseconds, subject to the precision and accuracy of system timers and 方法屬于Thread類中方法,表示讓一個線程進入睡眠狀態,等待一定的時間之后,自動醒來進入到可運行狀態,不會馬上進入運行狀態,因為線程調度機制恢復線程的運行也需要時間,一個線程對象調用了sleep方法之后,并不會釋放他所持有的所有對象鎖,所以也就不會影響其他進程對象的運行。 但在sleep的過程中過程中有可能被其他對象調用它的interrupt(),產生InterruptedException異常,如果你的程序不捕獲這個異常,線程就會異常終止,進入TERMINATED狀態,如果你的程序捕獲了這個異常,那么程序就會繼續執行catch語句塊(可能還有finally語句塊)以及以后的代碼。 另外注意sleep()方法是一個靜態方法,也就是說他只對當前對象有效,通過()讓t對象進入sleep,這樣的做法是錯誤的,它只會是使當前線程被sleep 而不是t線程方法void wait(long timeout)Causes the current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has wait(long timeout, int nanos)Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has 屬于Object的成員方法,一旦一個對象調用了wait方法,必須要采用notify()和notifyAll()方法喚醒該進程;如果線程擁有某個或某些對象的同步鎖,那么在調用了wait()后,這個線程就會釋放它持有的所有同步資源,而不限于這個被調用了wait()方法的對象。 wait()方法也同樣會在wait的過程中有可能被其他對象調用interrupt()方法而產生InterruptedException,效果以及處理方式同sleep()方法二,最后二者的共同點:1. 他們都是在多線程的環境下,都可以在程序的調用處阻塞指定的毫秒數,并返回。 2. wait()和sleep()都可以通過interrupt()方法 打斷線程的暫停狀態 ,從而使線程立刻拋出InterruptedException。 如果線程A希望立即結束線程B,則可以對線程B對應的Thread實例調用interrupt方法。 如果此刻線程B正在wait/sleep /join,則線程B會立刻拋出InterruptedException,在catch() {} 中直接return即可安全地結束線程。 需要注意的是,InterruptedException是線程自己從內部拋出的,并不是interrupt()方法拋出的。 對某一線程調用 interrupt()時,如果該線程正在執行普通的代碼,那么該線程根本就不會拋出InterruptedException。 但是,一旦該線程進入到 wait()/sleep()/join()后,就會立刻拋出InterruptedException 。 以上就是線程中sleep和wait的區別。
建個新線程,在這個線程里運行你的代碼。 在主線程里用_getch()監視控制臺輸入。 如果讀到字符(說明你敲鍵盤了) 就用 SuspendThread和 ResumeThread讓工作線程暫停或者繼續。
你是做醫療器械的嗎?在做監護儀程序??SuspendThread 的原形是:DWORD SuspendThread(HANDLE hThread);它返回的是線程的前一個暫停記數.線程暫停的次數可以是MAXIMUM_SUSPEND_COUNT次(在WINNT.H中是127);SuspendThread與內核方式的執行是異步的,但是在線程恢復運行之前,不會發生用戶方式的執行。 調用SuspendThread必須小心,如果線程試圖從堆棧中分配內存,那么該線程將在該線程上設置一個鎖,當其他線程試圖訪問該堆棧時,這些線程的訪問就被停止,直到第一個線程恢復運行,只有知道目標線程在干什么時,并且采取強有力的措施避免因暫停線程帶耒的問題或死鎖狀態,SuspendThread才是安全的。
內容聲明:
1、本站收錄的內容來源于大數據收集,版權歸原網站所有!
2、本站收錄的內容若侵害到您的利益,請聯系我們進行刪除處理!
3、本站不接受違法信息,如您發現違法內容,請聯系我們進行舉報處理!
4、本文地址:http://m.sycxjdsbhs.com/article/05610da11ebbcf4fc7ce.html,復制請保留版權鏈接!
簡介AWStats是一款免費且開源的Web服務器日志分析工具,可為網站管理員提供有關網站訪問者行為的寶貴見解,通過分析Web服務器日志文件,AWStats可以生成易于理解的報告,其中包含有關以下內容的信息,訪客數量和訪問次數受訪頁面和文件引用來源和搜索查詢瀏覽器和操作系統地理位置如何讀取AWStats報告AWStats報告由多個部分組...。
互聯網資訊 2024-09-30 15:20:52
簡介Git克隆是復制遠程Git倉庫到本地計算機的過程,這對于協作項目、從頭開始新項目或備份現有倉庫非常有用,在本教程中,我們將逐步指導您完成使用Git命令行克隆遠程倉庫的過程,并解釋每個命令的作用,先決條件安裝并配置Git具有遠程倉庫的URL步驟1,初始化本地目錄使用mkdir命令在本地計算機上創建您要克隆倉庫到的目錄,mkdirmy...。
最新資訊 2024-09-30 04:21:01
概述AndroidSDK,軟件開發工具包,是一個必不可少的工具包,為Android應用程序開發提供了全面的工具和資源,無論您是經驗豐富的開發者還是剛開始踏上移動開發之旅,下載和安裝AndroidSDK都是制定成功應用程序的至關重要的一步,本文將指導您完成下載和安裝AndroidSDK的過程,為您的移動開發之旅奠定堅實的基礎,步驟1,下...。
技術教程 2024-09-27 19:10:18
引言單片機是一種微型計算機,它包含一個中央處理器,CPU,、內存和輸入,輸出,I,O,設備,單片機用于各種應用中,從消費電子產品到工業自動化設備,單片機編程基礎匯編語言,匯編語言是一種低級編程語言,直接操作微處理器的指令,它提供了對硬件的精確控制,C語言,C語言是一種高級編程語言,提供了更高級別的抽象,使開發人員更容易編寫可移植且可維...。
技術教程 2024-09-27 18:12:27
隨著移動設備的普及,跨平臺應用程序開發變得越來越重要,其中,Flex和Flexbox作為強大的布局和樣式工具,在構建響應式且用戶友好的移動應用程序方面扮演著至關重要的角色,Flex布局Flex布局是一種CSS布局模型,它允許開發人員使用簡單而靈活的方式在容器中安排元素,它基于以下關鍵概念,容器,包含元素的父元素,彈性元素,容器內的子元...。
最新資訊 2024-09-25 05:59:37
歡迎來到Linux視頻課程指南!無論您是Linux新手還是經驗豐富的專業人士,本指南都將為您提供最全面的資源,讓您掌握Linux技能,針對不同技能水平的課程本指南中的課程按技能水平分類,以滿足不同學習者的需求,初學者,專為剛接觸Linux的初學者設計,涵蓋基本概念和操作,中級,適合有一定Linux基礎的人員,深入了解系統管理和命令行,...。
最新資訊 2024-09-24 21:01:39
鼠標的釋放操作鼠標是電腦操作中最常用的工具之一,它可以用來選中、移動和編輯文本,以及執行各種其他任務,許多用戶并沒有充分利用鼠標釋放功能,釋放操作是當您釋放鼠標按鈕時執行的操作,它可以用來執行多種任務,包括,選擇文本,將鼠標指針放在要選擇的文本開頭,按住鼠標按鈕并拖動到要選擇的文本末尾,釋放鼠標按鈕將選擇文本,移動文本,選擇文本后,將...。
技術教程 2024-09-24 18:45:02
簡介正則表達式是一種強大的工具,可以用來匹配、搜索和替換文本,它們在文本處理、數據驗證和自動化任務等方面有廣泛的應用,本文將指導你如何使用正則表達式替換字符串,從初學者到專家,用正則表達式替換字符串使用正則表達式替換字符串需要使用replace,方法,該方法接受兩個參數,一個要匹配的正則表達式和一個替換文本,語法,string.re...。
互聯網資訊 2024-09-16 16:31:22
簡介抽象方法錯誤是一種常見的Java編程錯誤,當試圖實例化一個抽象類或調用其抽象方法時會拋出此錯誤,抽象類是不能被實例化的類,它們的作用是定義子類必須實現的公共或受保護的抽象方法,原因抽象方法錯誤通常是由以下原因引起的,試圖實例化一個抽象類,試圖調用一個未在子類中實現的抽象方法,試圖對一個抽象類中的抽象方法進行覆蓋,但覆蓋的方法不是抽...。
互聯網資訊 2024-09-15 11:40:20
在構建用戶界面時,交互性至關重要,用戶希望能夠與頁面進行交互,獲取反饋并執行操作,控件工具箱提供了廣泛的小部件和控件,其中包含即用型的交互性,使開發人員能夠輕松創建動態且響應迅速的界面,在本教程中,我們將探討如何使用控件工具箱向界面注入交互性,從基本的輸入元素到更高級的組件,如彈出窗口和菜單,控件工具箱概述控件工具箱是一組預先構建的組...。
本站公告 2024-09-11 18:29:16
簡介低代碼和無代碼開發平臺使開發人員能夠使用可視化工具和預先構建的組件快速創建應用程序,而無需編寫大量代碼,它們提高了開發效率,使非技術人員也可以參與到應用程序開發過程中,低代碼和無代碼的區別雖然低代碼和無代碼開發都有助于加速應用程序開發,但它們在技術復雜性、目標受眾和用例方面存在一些關鍵區別,特性低代碼無代碼技術復雜性需要一些編程知...。
本站公告 2024-09-08 13:16:22
引言伴隨著科學技術的發展,人類對世界的認知不斷深入,仍有許多未解之謎等待我們破解,這些難題不僅激發著科學家的好奇心,更挑戰著科學的極限,破解這些難題不僅能擴大我們的知識邊界,更能推動科學的進步和社會的革新,挑戰極限的意義挑戰科學極限具有深遠的意義,拓展人類知識,破解未解之謎能拓展我們的知識邊界,讓我們更深入地了解世界,它可以顛覆現有理...。
互聯網資訊 2024-09-05 00:08:52