1. 程式人生 > >java中同步synchronized的意義,如何用它解決執行緒不安全的問題

java中同步synchronized的意義,如何用它解決執行緒不安全的問題

馬克-to-win:從上節我們學到,當多個執行緒訪問且更改同一個變數時,很容易出現執行緒安全問題,誠然,我們可以通過一些其他手段,比如區域性變數,多個例項,調整程式結構來解決執行緒安全問題,但是通常來講,通過同步機制synchronized來解決執行緒安全問題更加確定。比如,由於需求等其他限制條件決定,我們不能夠用區域性變數或多個例項或什麼其他辦法解決怎麼辦?synchronized為我們提供了比較確定的方法。換句話說,執行緒安全問題,synchronized基本能解決。分析上一節的執行緒安全問題,我們發現問題的起因主要是兩個執行緒同時訪問更改共同的變數造成的,只要我們讓能夠更改共同變數的方法序列的執行,(換句話就是一個執行完後,另一個再執行,) 就沒問題了。如何實現呢? 用synchronized,現在針對上一節有問題的例子:1.8.1_b,我們只加一個字synchronized, 問題就解決了,

例1.9.1-本章原始碼
class Photoshop {
private Photoshop() {
}
private static Photoshop photoshop = null;
public synchronized static Photoshop getInstanceQixy() {
if (photoshop == null) {
photoshop = new Photoshop();
}
return photoshop;
}
}
class MyThreadMark_to_win extends Thread {
public void run() {
Photoshop photoshopI1 = Photoshop.getInstanceQixy();
System.out.println(Thread.currentThread().getName() + "例項是 "
+ photoshopI1);
}
}
public class Test {
public static void main(String[] args) {
MyThreadMark_to_win mt1 = new MyThreadMark_to_win();。。。。。。。。。。。。。。。。。
詳情請進:
http://www.mark-to-win.com/JavaBeginner/JavaBeginner6_web.html#PointOfSynchronized

相關推薦

java同步synchronized意義如何用解決執行安全的問題

馬克-to-win:從上節我們學到,當多個執行緒訪問且更改同一個變數時,很容易出現執行緒安全問題,誠然,我們可以通過一些其他手段,比如區域性變數,多個例項,調整程式結構來解決執行緒安全問題,但是通常來講,通過同步機制s

java為什麼Hashtable是執行安全而HashMap是執行安全的?還有ArrayList為什麼是執行安全Vector是執行安全的??

文章目錄 一、HashMap解析 二、Hashtable解析 三、Collections.synchronizedMap()解析 四、ConcurrentHashMap 六、ArrayList為什麼是執行緒不安全的,Vector是執行緒安全的?

【Python】各位大佬幫忙看一下這怎麼就執行安全了?

在準備面試的過程中,看到網路上很多關於單例模式的執行緒不安全方面的知識 如下,一個單例模式: class Singleton(object): """ 單例 """ isinstance = None def __new__(cls,

執行同步解決執行安全問題

當多個執行緒併發訪問同一個資源物件時,可能會出現執行緒不安全的問題,比如現有50個蘋果,現在有請三個童鞋(小A,小B,小C)上臺表演吃蘋果.因為A,B,C三個人可以同時吃蘋果,此時使用多執行緒技術來實

java有幾種方法可以實現一個執行什麼關鍵字修飾同步方法 stop()和suspend()方法為何不推薦使用?

java5以前,有兩種實現方法,分別使用new Thread()和new Thread(runnable)形式,第一種繼承Thread類,直接呼叫thread的run方法,所以,我們往往使用Thread子類,即new SubThread()。第二種是實現Runn

java同步(synchronized)訪問共享的可變資料及原子性操作

當多個執行緒共享可變資料的時候,每個讀或者寫資料的執行緒都必須執行同步。如果沒有同步,就無法保證一個執行緒所做的修改可以被另外一個執行緒獲知。未能同步共享可變資料會造成程式的活性失敗(liveness failure)和安全性失敗(safety failure)

java有幾種方法可以實現一個執行什麼關鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?

java5以前,有如下兩種: 第一種: new Thread(){}.start();這表示呼叫Thread子類物件的run方法,new Thread(){}表示一個Thread的匿名子類的例項物件,子類加上run方法後的程式碼如下: new Thread(){ publi

【搞定Java併發程式設計】第26篇:Java的併發工具類之控制併發執行數的 Semaphore

上一篇:Java中的併發工具類之同步屏障 CyclicBarrier 本文目錄: 1、獲取許可證 2、釋放許可證 本文轉載自:https://mp.weixin.qq.com/s/LS8YBKpiJnHEY1kMWmwoxg 推薦閱讀:剖析基於併發AQS的共享鎖的實現(基於訊

執行如何控制併發數量? Semaphore 執行協同類來控制執行併發數量

1、 Semaphore:執行緒協同類,用來控制執行緒併發數量,並且可以更加細粒度的進行控制, 因為真正被控制最大併發的程式碼放到了acquire和release之間。 2、主要方法:

關於java併發時引起的問題(多執行問題)

場景如下: 我有一個訂單匯入頁面,如下圖: 公司裡面有很多員工,都需要進入這個頁面,進行訂單匯入。 併發進行,可能存在這樣的問題,兩個同事,同時輸了一個相同的訂單號,同時點選訂單匯入,同時匯入成功。 那麼資料庫中就會存在兩條一模一樣的訂單資料。 上面的問題是多執行緒引發

java 如何避免多執行安全

1.建立不可變物件 2. 執行緒封閉:把一個可變物件封裝到一個執行緒內部,或者使用ThreadLocal 3.使用volatile變數 volatile變數記憶體語義 1. 當對一個volatile變數進行寫操作的時候,JMM會把該執行緒對應的

java的互斥鎖,訊號量和多執行等待機制

互斥鎖和訊號量都是作業系統中為併發程式設計設計基本概念,互斥鎖和訊號量的概念上的不同在於,對於同一個資源,互斥鎖只有0和1 的概念,而訊號量不止於此。也就是說,訊號量可以使資源同時被多個執行緒訪問,而互斥鎖同時只能被一個執行緒訪問 互斥鎖在java中的實現就是 Reetr

HashMap執行安全的表現 -- Java 8

HashMap執行緒不安全的表現 -- Java 8 先來看看HashMap.put方法的原始碼 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }

java.text.DateFormat 執行安全問題

java.text下的 DateFormat 是執行緒不安全的; 建議1: 1、使用threadLocal包裝DateFormat(太複雜,不推薦) 2、使用org.apache.commons.lang3.time.DateFormatUtils下的方法(推薦) DateFormatUtils

Java併發程式設計 之 HashMap執行安全

我想在平時的多執行緒程式設計中,容器的使用是很普遍的,但是你有沒有考慮過有些容器是不安全的,如Haspmap、ArrayList。這裡講解一下Hashmap不安去體現在哪裡。 插入時不安全: 如果有兩個執行緒A和B,都進行插入資料,剛好經過雜湊計算後得到的雜湊碼是一樣的,即插入的

Java:為什麼說StringBuilder執行安全

一、前言 可能大家在學習java的基礎過程中,都知道StringBuilder相對StringBuffer效率更高,但是執行緒不安全。可是,到底是怎麼個不安全法,反正我是懵的。藉此機會,寫個小程式碼測試下。 二、編碼 既然是測試StringBuilder和StringB

java-雙重檢查鎖為什麼多執行安全

如下程式碼所示: public class doubleCheck{ private static Instance instance; public static Instance getInstance(){ if(instance==null){ //1

ThreadLocal使用注意:執行安全可能會發生記憶體洩漏

先說可能會發生記憶體洩漏: 前言 ThreadLocal 的作用是提供執行緒內的區域性變數,這種變數線上程的生命週期內起作用,減少同一個執行緒內多個函式或者元件之間一些公共變數的傳遞的複雜度。但是如果濫用ThreadLocal,就可能會導致記憶體洩漏。下面,我們將圍繞三個

java單例模式並解決懶漢式下執行安全的問題

單例模式中分為懶漢式和餓漢式 其中,懶漢式是執行緒不安全的,當有多條執行緒同時訪問單例物件時,則會出現多執行緒臨界資源問題。 現在用多執行緒實現並解決執行緒安全問題 餓漢式 public class SigletonDemo01 { static Ha

hashmap為什麼執行安全出現死迴圈

2018年11月18日 09:07:49 坑鏗吭 閱讀數:12 個人分類: java