1. 程式人生 > >synchronized(.class) synchronized(Object ) synchronized(this) 區別

synchronized(.class) synchronized(Object ) synchronized(this) 區別

1. synchronized(.class)只要是訪問這個類的方法,就會同步,不管用這個類建立了幾個物件!一般單列模式常用

例如:

private static volatile SingIn instance=null;
 private SingIn (){
 
 }
 public static  SingIn getInstance(){
    if(instance==null){
      synchronized(SingIn .class){
      if(instance==null){
        instance=new SingIn ();
       }
      }
     }
    
return instance; }

2.  synchronized(Object x),通過物件同步,注意必須是同一個物件

一般在多執行緒中訪問同一個物件時,在run方法中用到

例如:

@Override
 public void run(){
     synchronizedObject x){
         x .setDeviceName(“a”);
    }
}

3 .synchronized(this) 指的是物件本身同步,一般在定義物件的方法時可以用,當只有訪問同一物件,才會同步,和synchronized(Object x)功能類似。

例如:

    1. publicclass ObjectService {  
    2.     publicvoid serviceMethodA(){  
    3.         try {  
    4.             synchronized (this) {  
    5.                 System.out.println("A begin time="+System.currentTimeMillis());  
    6.                 Thread.sleep(2000);  
    7.                 System.out.println("A end   time="+System.currentTimeMillis());  
    8.             }  
    9.         } catch
       (InterruptedException e) {  
    10.             e.printStackTrace();  
    11.         }  
    12.     }  
    13.     publicvoid serviceMethodB(){  
    14.         synchronized (this) {  
    15.             System.out.println("B begin time="+System.currentTimeMillis());  
    16.             System.out.println("B end   time="+System.currentTimeMillis());  
    17.         }  
    18.     }  

相關推薦

synchronized(this)、synchronized(class)與synchronized(Object)的區別

在多執行緒開發中,我們經常看到synchronized(this)、synchronized(*.class)與synchronized(任意物件)這幾種型別同步方法。但是是否知道這幾種寫法有什麼區別

synchronized(.class) synchronized(Object ) synchronized(this) 區別

1. synchronized(.class)只要是訪問這個類的方法,就會同步,不管用這個類建立了幾個物件!一般單列模式常用例如:private static volatile SingIn instance=null; private SingIn (){ } p

synchronized(this) 與 synchronized(class) 理解

moni 獲取 interrupt locking volatil block ++ link ted 1.概念 synchronized 是 Java 中的關鍵字,是利用鎖的機制來實現同步的。 鎖機制有如下兩種特性: 互斥性:即在同一時間只允許一個線程持有某個

synchronized(this)與synchronized(class) 簡單例項

通過對以上文章的拜讀,我進一步加深了對執行緒同步鎖的理解。 下面就根據自己的理解,進行的簡單例項操作演示。 在看下面的程式碼前,強烈建議先拜讀上面的文章。 MainActivity.java package com.snowdream.demo; import

java的synchronized(引數),引數是this物件和引數是非this物件的區別

引數 相同點 不同點 引數是this物件 都能實現同步 實現同步的同時,會阻塞其他執行緒獲取這個物件的鎖,影響執行效率 引數是非this物件 都能實現同步 synchronized

Java多執行緒中Synchronized簡介和Static Synchronized區別

在進行Java開發時,多執行緒的開發是經常會使用的。首先會問一個小問題啊,在Java中有幾種方法可以建立一個執行緒? 我給的答案是3種。(如果還有其他的請留言告訴我哈。) 1、建立直接繼承自Thread類建立執行緒子類。   步驟如下:a 定義一個子類,同時

java面試題之synchronized和lock有什麽區別

作用範圍 out inter mutex 虛擬 add moni 私有 p s synchronized和lock的區別: 類別 synchronized lock 存在層次 java的關鍵字,在jvm層面上 是一個類 鎖的釋放

16、靜態同步synchronized方法與synchronized(class)程式碼塊

靜態同步synchronized方法 package com.demo19; public class MyObject { synchronized public static void a(){ try { System.out.prin

Synchronized和Lock的用法和區別

1、Synchronized和Lock的用法和區別 1.synchronized是託管給JVM執行的,而Lock是Java寫的控制鎖的程式碼。  2.synchronized原始採用的是CPU悲觀鎖機制,即執行緒獲得的是獨佔鎖。獨佔鎖意味著其他執行緒只能依靠阻塞來等待執行緒釋放鎖。而在

執行緒的同步控制synchronized和lock的對比和區別

我們在面試的時候,時常被問到如何保證執行緒同步已經對共享資源的多執行緒程式設計。我們當然用同步程式碼塊,同步方法,又或者是用java提供的鎖機制來達到對共享資源變數的同步控制。 那麼我們什麼時候用synchronized,什麼時候用lock,以及他們的區別是什麼呢; 首先來

關於synchronized的Monitor Object機制的研究

這是一道面試題 Synchronized 介紹 monitor Object 設計模式 Monitor(java多執行緒同步機制) Refer synchronized介紹 synchronized關鍵字通過修飾一個方法或宣告一個程式碼塊,從而產

Synchronized、Lock、ReentantLock的區別,以及用法

最近在看《Java併發程式設計的藝術》,書中不少知識是更深入的去講解我們平時經常使用的併發實現機制,介紹了它們的實現原理和區別,讀完之後真的有種醍醐灌頂的感覺,突然就好像明白了這些實現到底是幹什麼用、什麼時候去用,今天我就來總結一下其中的一個知識點——Synchronized

跟著例項學習java多執行緒3-synchronized的多種寫法有何區別

同步程式碼塊是一種有效實現操作原子性的方法,上一章我們講了一些同步的原子操作的基礎。 現在我們回憶一下上一章的兩個問題。 1:不同的synchronized的寫法有什麼區別,又該怎麼寫建立執行緒的程式碼呢? 以class例項物件作為鎖的寫法 寫法1 package com.

Java進階知識--Synchronized、Lock、ReentrantLock的區別

最近在看《Java併發程式設計的藝術》,書中不少知識是更深入的去講解我們平時經常使用的併發實現機制,介紹了它們的實現原理和區別,讀完之後真的有種醍醐灌頂的感覺,突然就好像明白了這些實現到底是幹什麼用、什麼時候去用,今天我就來總結一下其中的一個知識點——Synch

java同步鎖中synchronized和Lock介面類的區別

Lock提供了和synchronized類似的同步功能,只是在使用時需要顯示地獲取和釋放鎖。雖然Lock缺少了synchronized隱式獲取釋放鎖的便捷性,但是卻擁有了鎖獲取與是釋放的可操作性、可中斷的獲取鎖以及超時獲取鎖等多種synchronized所不具備的同步特性

python中type、classobject區別

版本 src 同時 ati 創建 內置 lis dict 之間 type 一、 type可以用來返回一個對象的類型 例如: 二、 由於Python中一切皆對象,也就是說Python中的任何變量類型都是可以被修改的,這也是Python等動態編程語言的特點。type的基類是o

[22]Synchronized程式碼塊與Synchronized函式

一、使用原因 多執行緒使用原因: 一塊大蛋糕太大了,一天內還需要吃完,不然就壞了,一個人吃不完,所以需要兩個人吃,但是隻有一個勺子,如果A吃的時候不小心把勺子弄丟了。需要花時間找,那麼B就不能吃。所以就需要使用多執行緒。給兩個勺子,就算A吃的時候丟了,B也可以不受到影響。繼續執行

classobject、case class、case object區別

pri print 區別 初始 默認 ray ava 同時 pro /** class、object、case class、case object區別 * * class 類似Java中的class; * object Scala中沒有靜態修飾符static,

類名.class和類名.this區別

類名.class我們知道在java中,一個類在被載入的時候虛擬機器就會自動的生成一個這個類的一個Class型別的“類物件”,每個類都對應著一個這樣的類物件,通過這個Class型別的類物件,我們就能夠使用“內省與反射”機制,訪問一個類的資訊,比如:對應類中的方法有哪些,成員域有

Class.forName和registerDriver的區別

http div .cn 通過 文章 函數 accep roo details 我們都知道JDBC的代碼怎麽寫,比如以MySQL JDBC為例 //註冊JDBC驅動 Class.forName("com.mysql.jdbc.Driver"); //然後就可以拿到JD