`
liuInsect
  • 浏览: 133372 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

JAVA Synchronized 关键字锁实例和锁CLASS对象的区别

阅读更多
package Thread.synchronizedTest;

public class SynchronizedTest {
 
 /**
  * 锁住class对象
  */
 public static   void synchronizedStatic(){
  synchronized(SynchronizedTest.class){
   System.out.println("synchronizedStatic");
   try {
    Thread.sleep(10000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
  }
   
 }
 
 /**
  * 锁住方法,lock标记打在该实力上
  */
 public synchronized void synchronizedMethod(){
  System.out.println("synchronizedMethod");
  try {
   Thread.sleep(8000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  
 }
 
 /**
  * 不会有影响,正常调用
  */
 public  void synchronizedMethod2WithNosynchronized(){
  System.out.println("synchronizedMethod2WithNosynchronized");
 }
 /**
  * synchronizedMethod 已经锁住实例,
  * 再加锁不成功
  */
 public  void synchronizedMethod2(){
  synchronized( this ){
   System.out.println("synchronizedMethod2");
   try {
   Thread.sleep(15000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  }
 }
 
 /**
  * synchronizedMethod 已经锁住实例,
  * 再加锁不成功
  */ 
 public  void synchronizedMethod3(){
  synchronized( this ){
   System.out.println("synchronizedMethod3");
 } 

  
 }

 /**
  * @param args
  * @throws InterruptedException 
  */
 public static void main(String[] args) throws InterruptedException {
  // TODO Auto-generated method stub
  final SynchronizedTest t= new SynchronizedTest();
  Thread th = new Thread( new Runnable(){

   @Override
   public void run() {
    // TODO Auto-generated method stub
    t.synchronizedStatic();
   }
   
  } );
  th.start();
  
  
  th = new Thread( new Runnable(){

   @Override
   public void run() {
    // TODO Auto-generated method stub
    t.synchronizedMethod();
   }
   
   
  } );
  th.start();
  
  
 
  th = new Thread( new Runnable(){

   @Override
   public void run() {
    // TODO Auto-generated method stub
    t.synchronizedMethod2();
   }
   
   
  } );
  th.start();
  t.synchronizedMethod2WithNosynchronized();
  
  t.synchronizedMethod3();
 }

}

 

分享到:
评论
1 楼 panamera 2017-09-05  
楼主有没有测试过,没有发你说什么锁不成功,都不知道你想表达什么。t.synchronizedMethod2WithNosynchronized();

t.synchronizedMethod3();都能正常执行,使用的锁都是类对象,没有毛病

相关推荐

    实例解析Java中的synchronized关键字与线程平安问题_.docx

    但是,很多开发者对 synchronized 关键字的理解并不够深入,本文将通过实例解析 Java 中的 synchronized 关键字与线程平安问题,帮助开发者更好地理解和使用 synchronized 关键字。 首先,需要清晰的是 ...

    java的线程同步机制synchronized关键字的理解_.docx

    synchronized 方法的缺陷是:同一个对象的不同线程之间会形成互斥,而对这个对象所属的 Class 所产生的另一对象却可以任意调用这个被加了 synchronized 关键字的方法。 synchronized 块 除了方法前用 synchronized...

    java基本教程之synchronized关键字java多

    每个Java对象都可以作为锁,`synchronized`关键字实际上是在获取和释放对象的监视器锁(也称为内置锁或互斥锁)。对于非静态方法,锁是当前对象;对于静态方法,锁是对应的类的Class对象。 三、synchronized的两种...

    深入理解java中的synchronized关键字

    Java中的`synchronized`关键字是用于实现线程同步的关键机制,它的主要目的是确保在多线程环境中,对共享资源的访问能够保持数据的一致性和完整性。本文将深入探讨`synchronized`的两种主要用法:synchronized方法和...

    【ASP.NET编程知识】实例解析Java中的synchronized关键字与线程安全问题.docx

    线程安全问题的解决方案不仅仅是添加`synchronized`关键字那么简单,还需要正确理解锁的范围和作用对象。在编写多线程代码时,应当尽量减少锁的粒度,以提高并发性能。同时,过度依赖同步可能导致死锁、活锁等问题,...

    java里面synchronized用法.doc

    synchronized 关键字可以被用于两种范围内:对象实例和类范围。 1. 对象实例范围:synchronized 关键字可以被用于对象实例的方法上,以防止多个线程同时访问同一个对象的 synchronized 方法。例如: ```java public...

    Synchronized关键字的用法

    ### Synchronized关键字在Java中的应用 #### 概述 `synchronized`是Java语言中的一个关键字,主要用于实现线程同步,防止多个线程同时访问共享资源而导致的数据不一致问题。通过`synchronized`关键字,开发者可以...

    Java并发-Synchronized关键字.docx

    本文将探讨Synchronized关键字在解决并发控制中的作用及其使用方式。 首先,让我们回顾一下问题的背景:在给出的示例代码中,创建了10个线程,每个线程都对共享变量`count`进行10000000次的累加操作。理论上,最终...

    synchronized枷锁实例

    一个线程可以同时持有类锁和对象锁,只要这些锁对应的资源不同。例如,一个线程可以调用类的静态同步方法,同时另一个线程调用同一个类的实例同步方法,这两个操作是可以并发进行的,因为它们锁定的对象不同。 在...

    举例讲解Java中synchronized关键字的用法

    当`synchronized`关键字修饰一个非静态方法时,该方法的锁作用于`this`对象,即当前实例对象。这意味着,如果两个线程分别通过不同的实例对象调用同一个`synchronized`方法,它们可以并行执行,因为它们持有不同的...

    java synchronized关键字的用法

    synchronized 关键字通过 JVM 的监视器锁(Monitor)来实现,每个对象都关联着一个监视器锁。当一个线程进入同步代码块或同步方法并获取到锁后,其他试图进入的线程将会被阻塞,直到持有锁的线程退出同步块,其他...

    java关键字Synchronized详解

    Java中的`synchronized`关键字是实现线程同步的关键机制,它保证了在多线程环境下,对共享资源的访问是互斥的,防止了数据竞争和不一致的问题。synchronized通过锁的概念来控制对代码块或方法的访问,分为两种形式:...

    解析Java编程之Synchronized锁住的对象

    因此,synchronized关键字锁住的是当前对象的实例,而不是Class对象。由于每个线程都有自己的对象实例,因此多个线程在执行时根本就没有竞争同一个对象锁。 为了解决这个问题,我们可以使用同步块来锁住当前类的...

    synchronized用法大全实例

    本实例大全将全面解析`synchronized`的使用方式,包括同步方法、同步语句块、类锁和对象锁。 ### 1. 同步方法 同步方法是通过在方法声明前加上`synchronized`关键字实现的。这样,同一时间只有一个线程可以执行该...

    并发编程原理学习:synchronized关键字.doc

    并发编程是多线程环境下确保程序正确性的关键技术,而Java中的`synchronized`关键字则是实现并发控制的重要工具。`synchronized`关键字可以用于修饰方法或作为同步代码块,其核心目标是保证线程对共享资源的访问具有...

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    Java 中 Synchronized(对象锁)和 Static Synchronized(类锁)的区别 Synchronized 和 Static Synchronized 是 Java 中两种同步机制,它们都用于解决多线程并发访问的安全问题。然而,它们之间存在着本质的区别。...

    Java synchronized详细解读.docx

    对于静态(`static`)方法,`synchronized`关键字锁定的是类的Class对象,因此,无论有多少个类的实例,所有线程在访问静态同步方法时都需要获取类的Class对象锁。这意味着,即使有多个类实例,所有线程也无法同时执行...

    JAVA面试题 简谈你对synchronized关键字的理解

    对象锁和类锁是锁的两种形式,对象锁用于对象实例方法,类锁用于类的静态方法或者一个类的class对象。对象锁和类锁在锁的概念上基本上是一致的,但是它们之间有很大的区别。 Synchronized的用法 Synchronized可以...

    Java的关键字与保留字

    在深入探讨Java的关键字与保留字之前,我们首先需明确两个概念:关键字和保留字。在编程语言中,关键字是预定义的具有特殊含义的标识符,它们在编译时被解析器识别并执行特定的功能;而保留字则是语言设计者为未来...

    Java基础之关键字_Java基础之关键字_源码

    在编程语言的学习中,了解和掌握关键字是至关重要的一步,特别是在Java这种强类型的语言中。本文将深入探讨Java中的关键字,这些关键字是Java语法结构的基础,它们被Java编译器特殊处理,有着特定的含义和功能。 ...

Global site tag (gtag.js) - Google Analytics