Java 執行緒的suspend()和stop()不安全的原因
一、suspend()不安全的原因
在Java中執行緒的suspend()方法用於懸掛起一個執行緒,但是它之前持有的鎖卻沒有釋放。那麼其他等待該鎖的執行緒就會一直等待,直到該執行緒被resume(),那麼在這種情況下,有可能造成迴圈等待,進而死鎖。因此Java已經不推薦使用該方法。
二、stop()方法不安全的原因
在Java中執行緒的stop()方法用於停止一個執行緒,而且是立即停止。那麼這裡會出現一個問題,一些本應該是類似事務過程可能沒有一次完成(原子性),從而造成資料錯亂。
比如 下面這種,x,y理應同時被賦值,如果執行緒剛賦值了x就被強制停止了,那麼就出現了問題。
synchronized(this){
x=1;
y=2
}
因此stop()方法也廢棄了。
相關推薦
Java 執行緒的suspend()和stop()不安全的原因
一、suspend()不安全的原因 在Java中執行緒的suspend()方法用於懸掛起一個執行緒,但是它之前持有的鎖卻沒有釋放。那麼其他等待該鎖的執行緒就會一直等待,直到該執行緒被re
Java執行緒-同步和非同步的區別
1. &nb
Java執行緒學習和總結(執行緒的概念)
執行緒的概念: 多執行緒允許在程式中併發執行多個指令流,每個指令流都稱為一個執行緒,彼此間互相獨立。它和程序一樣擁有獨立的執行控制,由作業系統負責排程,區別在於執行緒沒有獨立的儲存空間,而是和所屬程序中的其它執行緒共享一個儲存空間,這使得執行緒間的通訊遠較程序簡單。 具體到java記憶體模型,
java執行緒池和資料庫連線池[從學習到工作(二)]
背景:前段時間工作需要開發一個socket服務端,在接受到客戶端發過來的報文資訊後解析報文呼叫資料庫程式完成資料檔案的生成再拼湊結果報文反饋給客戶端。由於客戶數比較多,所以用執行緒池和資料庫連線池。 一.執行緒池
java執行緒wait和notify 筆記理解
首先明確 兩個的概念: wait()方法是暫停使用當前鎖執行的執行緒,並釋放當前執行緒的資源和當前的物件鎖。 notify()方法是隨機喚醒使用當前鎖暫停的執行緒,而notifyAll()是喚醒所有的使用當前鎖暫停的執行緒 直接兩段程式碼 看看效果: 一個生產者執行緒往list新增一
java 執行緒——synchronized 和 volatile 關鍵字
synchronized 和 volatile 關鍵字 原子性 可見性 有序性 加在方法上 原子性、可見性、有序性 在講這兩個關鍵字之前,我們先來看一下幾個概念 原子性 原子性是指一個操作時不可中斷的,要麼全部執行成功,要麼全部執行失敗
Java 執行緒sleep() 和 wait()的區別
sleep(休眠) 和 wait(等待) 方法是 Java 多執行緒中常用的兩個方法 區別1:使用限制 使用 sleep 方法可以讓當前執行緒休眠,時間一到當前執行緒繼續往下執行,在任何地方都能使用
java執行緒優先順序和守護執行緒的概念
執行緒優先順序和守護執行緒的概念 優先順序 守護執行緒 守護執行緒與使用者執行緒區別 參考文獻 優先順序 java的執行緒優先順序總共有10個級別,從1到10,1為優先順序最小,10為最大。通過執行緒的setPriority(in
Java執行緒——Runnable和Thread的區別
Runnable 是介面 Thread 是類,且實現(implement)了Runnable介面 Thread原始碼: public class Thread implements Runnable { private static class Cach
java 執行緒同步和非同步
ava執行緒 同步與非同步 執行緒池 1)多執行緒併發時,多個執行緒同時請求同一個資源,必然導致此資源的資料不安全,A執行緒修改了B線 程的處理的資料,而B執行緒又修改了A執行緒處理的數理。顯然這是由於全域性資源造成的,有時為了解 決此問題,優先考慮使用區域性變數,退
Java --- 執行緒同步和非同步的區別
1. Java 執行緒 同步與非同步 多執行緒併發時,多個執行緒同時請求同一個資源,必然導致此資源的資料不安全,A執行緒修改了B執行緒的處理的資料,而B執行緒又修改了A執行緒處理的數理。顯然這是由於全域性資源造成的,有時為了解決此問題,優先考慮使用區域性變數,
Java 執行緒組和執行緒池區別
執行緒組: 執行緒組存在的意義,首要原因是安全。 java預設建立的執行緒都是屬於系統執行緒組,而同一個執行緒組的執行緒是可以相互修改對方的資料的。 但如果在不同的執行緒組中,那麼就不能“跨執行緒組”
Java執行緒wait()和notify()的簡單使用
package com.ThreadPool; import java.util.LinkedList; /** * 2019-1-8 * @author Administrator * */ public class Lock { public static void main(St
java執行緒池和關閉執行緒池中的執行緒
如果執行緒經常喜歡去new的話是不對的,你需要一個池子管理。 newCachedThreadPool 這個一個帶快取的執行緒池,是個可以無限大的執行緒池,新建的執行緒放倒這個池子裡,當執行緒停掉了的時候,下個個執行緒進來,可以複用這個執行緒。 newFixe
學習java執行緒狀態和看懂thread dump檔案中的執行緒資訊
執行緒的狀態是一個很重要的東西,因此thread dump中會顯示這些狀態,通過對這些狀態的分析,能夠得出執行緒的執行狀況,進而發現可能存在的問題。執行緒的狀態在Thread.State這個列舉型別中定義: public enum State { /
java執行緒池和佇列詳細講解
Java執行緒池使用說明 一簡介 執行緒的使用在java中佔有極其重要的地位,在jdk1.4極其之前的jdk版本中,關於執行緒池的使用是極其簡陋的。在jdk1.5之後這一情況有了很大的改觀。Jdk1.5之後加入了java.util.concurrent包,這個包中主要介紹j
java執行緒池和佇列分析
Java專案 當想讓程式非同步操作的時候,首先考慮使用Java多執行緒,但有的時候我們總會在想是簡單的extends Thread 、implements Runnable介面還是使用執行緒池呢?而大多開發者可能更會選擇使用執行緒池,.減少了建立和銷燬執行緒的次數,每個工作
java執行緒池,阿里為什麼不允許使用Executors?
帶著問題 阿里Java程式碼規範為什麼不允許使用Executors快速建立執行緒池? 下面的程式碼輸出是什麼? ThreadPoolExecutor executor = new ThreadPoolExecutor( 1, //corePoolSize 100, //ma
Java執行緒狀態和關閉執行緒的正確姿勢
1、執行緒狀態及切換 Java中的執行緒有六種狀態,使用執行緒Thread內的列舉類來實現,如下,我對每個狀態都進行了一定的解釋。 public enum State { /** 表示一個執行緒還沒啟用(即未呼叫start方法)*/ NEW,
Java執行緒stop和suspend的廢棄
JDK1.0定義了stop和suspend方法,stop用來直接終止執行緒,suspend會阻塞執行緒直到另一個執行緒呼叫resume. stop和suspend都有一些共同的點:都試圖專橫的控制一個給定了的執行緒的行為. 從JDK1.2開始,這兩個方法都被棄用了.stop