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