1. 程式人生 > >suspend和resume弊端

suspend和resume弊端

1、suspend將執行緒掛起,執行->阻塞;呼叫後並不釋放所佔用的鎖

resume將執行緒解掛,阻塞->就緒

2、suspend和resume這兩種方法不建議使用,因為存在很多弊端。

(1)獨佔:因為suspend在呼叫過程中不會釋放所佔用的鎖,所以如果使用不當會造成對公共物件的獨佔,使得其他執行緒無法訪問公共物件,嚴重的話造成死鎖

下面的例子便於理解 只列舉部分程式碼,應該可以看得明白

Public void run(){

While(true){

i++;

//System.out.println(i);

}}

Public static void main(String[] args){ ...

thread.suspend();

System.out.println(“main end”);

...}

首先執行的時候會出現main end;

        如果將註釋的println語句新增進來,則結果大不相同程式會輸出 i=0...i=3333但是掛起後不會輸出main end

這是因為println函式,suspend掛起後的執行緒沒有釋放鎖,導致其他執行緒在呼叫println函式時出現阻塞

Public void println(long x){

Synchronized(this){

Print(x);

newLine(); }}

(2)不同步:容易出現因執行緒暫停導致的資料不同步

相關推薦

suspendresume弊端

1、suspend將執行緒掛起,執行->阻塞;呼叫後並不釋放所佔用的鎖 resume將執行緒解掛,阻塞->就緒 2、suspend和resume這兩種方法不建議使用,因為存在很多弊端。 (1)獨佔:因為suspend在呼叫過程中不會釋放所佔用的鎖,所以如果使用不

Linux的suspendresume

等待 add span post 內核函數 printk 恢復 devices pat 參考: www.wowotech.net/linux_kenrel/suspend_and_resume.htmlwww.wowotech.net/linux_kenrel/pm_int

Linux的系統suspendresume

參考: www.wowotech.net/linux_kenrel/suspend_and_resume.htmlwww.wowotech.net/linux_kenrel/pm_interface.html 一、基本介紹 1.Window下的睡眠就是Suspend to RAM, 休眠就是Suspen

Java中的執行緒Thread方法之---suspend()resume()

案例一:(通過打斷點除錯) package com.threadstop.demo; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.u

通過SIMPLE_DEV_PM_OPS定義suspendresume函式【轉】

本文轉載自:https://blog.csdn.net/tiantao2012/article/details/77851782 通過SIMPLE_DEV_PM_OPS 定義這個驅動的suspend和resume函式,如果沒有定義CONFIG_PM_SLEEP的時候就將CONFIG_PM_SLEEP定義為空

暫停執行緒(suspendresume

不多說程式碼演示:public class MyThread extends Thread { private long i = 0; public long getI() { return

解決了USB中suspendresume的一個問題

      我們公司GSM部門有個雙模智慧手機的專案。MTK平臺和EVDO平臺通過USB進行通訊。結果在專案測試過程中發現,當MTK做HOST控制EVDO做Device時,HOST控制Device進行suspend和resume狀態切換過程中發現狀態出現故障。即裝置進入sus

為什麼執行緒會放棄SuspendResume方法

記錄一下,多久沒看youku了哦,有鬥魚,有樂視,還有翻牆,真的很久沒開啟優酷了 百度一下, 說什麼 “suspend()方法就是將一個執行緒掛起(暫停),resume()方法就是將一個掛起執

為何java裡的Thread類的方法suspend()resume()不推薦使用?

官方解釋如下:http://download.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.htmlWhy are Thread.suspend and Th

java面試題之wait(),notify()suspend(),resume()之間的區別

wait()方法和notify()方法的區別: 這兩個方法都是屬於Object類中的,也是配套使用的,當呼叫這兩個方法阻塞時要釋放佔用的鎖,而鎖是任何物件都具有的,呼叫任意物件的wait()方法導致執行緒阻塞,並且該物件上的鎖被釋放; 而呼叫任意物件的notify()方法則導致從呼叫該物件的wait()方

java 多執行緒suspend()、resume()wait()、notify()的區別

初看起來它們與 suspend() 和 resume() 方法對沒有什麼分別,但是事實上它們是截然不同的。區別的核心在於,前面敘述的所有方法,阻塞時都不會釋放佔用的鎖(如果佔用了的話),而這一對方法則相反。 上述的核心區別導致了一系列的細節上的區別。     首先,前面敘述的所有方法都隸屬於 Thread

關於TThread類的Suspend()方法Resume()方法.

    並不是只要呼叫了Resume()執行緒就能繼續執行,這個函式執行的效果根據該執行緒的暫停計數(suspend count)來確定.    每個執行緒都有一個暫停計數(最大MAXIMUM_SUSPEND_COUNT),如果一個執行緒的暫停計數大於0,那麼執行緒就會被暫停

USB的掛起喚醒 (Suspend and Resume)

USB協議的第9章講到USB可見裝置狀態[Universal Serial Bus Specification, Section 9.1.1, Pg 239],分為連線(Attached),上電(Powered),預設(Default),地址(Address),配置(Co

JAVA多執行緒suspend()、resume()wait()、notify()的區別

   suspend() 和 resume() 方法:兩個方法配套使用,suspend()使得執行緒進入阻塞狀態,並且不會自動恢復,必須其對應的 resume() 被呼叫,才能使得執行緒重新進入可執行狀態。典型地,suspend() 和 resume() 被用在等待另一個

Thread 中 Susend()Resume過時的解決辦法

在C#中對執行緒進行暫停時 發現Suspend()和Resume()過時,找了最後發現這樣可以比較簡單的解決這個問題 private static bool State = true; static AutoResetEvent ResetThr = new AutoRese

java thread的stop,suspendresume等方法廢棄的原因

如下是官方文件,先貼上,抽時間翻譯 Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? Why is Thread.stop

Java 執行緒的suspend()stop()不安全的原因

一、suspend()不安全的原因        在Java中執行緒的suspend()方法用於懸掛起一個執行緒,但是它之前持有的鎖卻沒有釋放。那麼其他等待該鎖的執行緒就會一直等待,直到該執行緒被re

Java併發程式設計系列之六 stop resume suspend

                        這三個方法已經是

Windows 多執行緒之 掛起執行緒(Suspend重新啟用(Resume

首先來一下原型展示: DWORD SuspendThread(HANDLE hThread);   DWORD ResumeThread(HANDLE hThread);   只要傳入想要掛起的執行緒控制代碼就可以了。 原理:在CreateThread的時候,執行緒核對象(

Java併發程式設計系列之六:stop()、resume()suspend()

這三個方法已經是jdk是過期的方法,為什麼仍然要單獨拿出來說呢?主要目的是理解jdk多執行緒API設計的初衷,理解並且更好使用執行緒API。那麼就來說說這三個方法吧:stop方法用於終止一個執行緒的執行,resume方法用於恢復執行緒的執行,suspend方法用