1. 程式人生 > >Java中使用同步關鍵字synchronized需要注意的問題

Java中使用同步關鍵字synchronized需要注意的問題

本文原地址:http://www.cnblogs.com/xiohao/p/4385582.html

在Java中,synchronized關鍵字是用來控制執行緒同步的,就是在多執行緒的環境下,控制synchronized程式碼段不被多個執行緒同時執行。synchronized既可以加在一段程式碼上,也可以加在方法上。

關鍵是,不要認為給方法或者程式碼段加上synchronized就萬事大吉,看下面一段程式碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 class Sync { public synchronized void test() { System.out.println("test開始.."); try { Thread.sleep(1000); catch (InterruptedException e) { e.printStackTrace(); } System.out.println("test結束.."); } } class MyThread extends Thread { public void run() {
Sync sync = new Sync(); sync.test(); } } public class Main { public static void main(String[] args) {

相關推薦

Java使用同步關鍵字synchronized需要注意的問題

本文原地址:http://www.cnblogs.com/xiohao/p/4385582.html 在Java中,synchronized關鍵字是用來控制執行緒同步的,就是在多執行緒的環境下,控制synchronized程式碼段不被多個執行緒同時執行。sy

java同步方式--synchronized

執行緒安全,是指每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的。或者說:一個類或者程式所提供的介面對於執行緒來說是原子操作或者多個執行緒之間的切換不會導致該介面的執行結果存在二義性,也就是說我們不用考慮同步的問題。 執行緒安全問題都是由全

Java關鍵字synchronized

1. 介紹 在Java併發系列的文章中,這個是第二篇文章。在前面的一篇文章中,我們學習了Java中的Executor池和Excutors的各種類別。 在這篇文章中,我們會學習synchronized關鍵字以及我們在多執行緒的環境中如何使用。 2. 什麼是同步? 在一個多執行緒的環境中,多個執行緒同時訪

Java同步關鍵字synchronized詳解

前言 多執行緒程式設計可以極大地提高了效率,但也會帶來執行緒安全問題。比如說多個執行緒向資料庫插入資料,就可能會導致資料庫中資料重複。 什麼時候會引發執行緒安全問題 首先我需要了解什麼是臨界資源?有這樣一種資源,在某一時刻只能被一個執行緒所使用,這種資源可以是各

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

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

Java同步關鍵字Synchronized深入理解

題記 講講寫這篇部落格的原因,因為自認為對synchronized這個關鍵字很瞭解了,前幾天和一個剛好在找工作的朋友聊到了這個。結果他把面試遇到的一個問題給我出了出來,當我蒙圈的那一刻才懂得自己之前的瞭解只是皮毛。 正文 對於synchronized這

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

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

JAVAthis關鍵字的用法

blog http tro font return his 局部變量 .com str this關鍵字主要有三個應用: 1.調用本類中的屬性,也就是類的成員變量; 2.調用本類中的其他方法; 3.調用本類中的其他構造方法,調用時候要放在構造方法的首行。 * this關鍵

就是要你懂Javavolatile關鍵字實現原理

stub string home 技術分享 訪問速度 get 地址傳遞 code 緩沖 原文地址http://www.cnblogs.com/xrq730/p/7048693.html,轉載請註明出處,謝謝 前言 我們知道volatile關鍵字的作用是保證變量在多線程之

javavolatile關鍵字的含義

能夠 system 內存區域 退出 tro 技術 2.4 虛擬機 們的 在java線程並發處理中,有一個關鍵字volatile的使用目前存在很大的混淆,以為使用這個關鍵字,在進行多線程並發處理的時候就可以萬事大吉。 Java語言是支持多線程的,為了解決線程並發的問題,在語

Javastatic關鍵字用法總結

副本 大括號 跟著 rac clas main 靜態成員變量 abstract 全局變量 1. 靜態方法 通常,在一個類中定義一個方法為static,那就是說,無需本類的對象即可調用此方法 聲明為static的方法有以下幾條限制: · 它們僅能調用其他的sta

Javainstanceof關鍵字的用法總結

animal copy false 運算 erl 一個 strong 以及 繼承 instanceof是Java的一個二元操作符,和==,>,<是同一類東東。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,

[轉] javavolatile關鍵字的含義

讀取 add 由於 tar 並不是 ges 內部 post 計數 在java線程並發處理中,有一個關鍵字volatile的使用目前存在很大的混淆,以為使用這個關鍵字,在進行多線程並發處理的時候就可以萬事大吉。 Java語言是支持多線程的,為了解決線程並發的問題,在

Javainstanceof關鍵字的用法

m60 cin .com 關鍵字 adr www. zdb kms http f72o1u前盞彜渦踴促http://shequ.docin.com/mym827424fzhy9晨撈晨詡鷗淹http://www.docin.com/rww41025xh82bc僭攀潭倜歡稱ht

Javavolatile關鍵字實現原理

三級 poll 解讀 內存屏障 就會 主存 發生 調用 獲得 原文地址http://www.cnblogs.com/xrq730/p/7048693.html,轉載請註明出處,謝謝 前言 我們知道volatile關鍵字的作用是保證變量在多線程之間的可見性,它是ja

隨筆② Java關鍵字 --- final關鍵字

初始 編譯 this 集合 div 緩存 nal ext 環境 一:final關鍵字 ① final變量:凡是對成員變量或者本地變量(在方法中的或者代碼塊中的變量稱為本地變量)聲明為final的都叫作final變量。final變量經常和static關鍵字一起使用,作為常量。

隨筆14 java關鍵字

this div .cn ges -1 style class clas ron 一:java中的關鍵字列表 二:super關鍵字 super關鍵字在子類內部使用,代表父類對象。 訪問父類的屬性 super.屬性名 訪問父類的方法 super.方法名() 子類構

javavolatile、synchronized

htm mic eight 完成 安全問題 strong 跳過 ring 變量定義 先補充一下概念:Java 內存模型中的可見性、原子性和有序性。 可見性:   可見性是一種復雜的屬性,因為可見性中的錯誤總是會違背我們的直覺。通常,我們無法確保執行讀操作的線程能適時地看到其

Javathis關鍵字的使用

成員變量 用法 表示 當前 重載 說明 可讀性 舉例 調用構造 說明:this用於指向調用該方法的當前對象。 用法: 1. this.成員變量 ------ 表示訪問當前對象的成員變量 2. this() ------

javafinal關鍵字

成員變量 子類 void color 需要 sta new 根據 基本用法 在Java中,final關鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量)。下面就從這三個方面來了解一下final關鍵字的基本用法。 1.修飾類   當用final修飾一個類時,表明這個類