`
liuInsect
  • 浏览: 131991 次
  • 性别: 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高并发编程详解:多线程与架构设计 (Java核心技术系列)

    第二部分引入了ClassLoader,这是因为ClassLoader与线程不无关系,我们可以通过synchronized关键字,或者Lock等显式锁的方式在代码的编写阶段对共享资源进行数据一致性保护,那么一个Class在完成初始化的整个过程到...

    java 面试题 总结

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、Overload...

    华为IBM的java面试题

    26.java的awt和swing组件的GUI设计的关键 ...36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别?

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    观事务的软件化模拟,是变量(数据和数据结构)和相关方法(对数据操作和对象管理的程 序)的软件组合。 在面向对象的程序设计中,你可以用软件对象表示现实世界的对象,而这些软件对象和 现实世界对象是相对应的。...

    JAVA面试题最全集

    掌握类和对象的概念,掌握面向对象编程的本质 49.静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:thorws,throw,try,catch,finally 51.Object类(或者其...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...

    java基础案例与开发详解案例源码全

    12.4.2 对象锁319 12.4.3 wait和notify方法320 12.4.4 死锁322 12.5 集合类的同步问题323 12.5.1 使用synchronized同步块324 12.5.2 使用集合工具类同步化集合类对象324 12.5.3 使用JDK5.0后提供的并发集合类324 ...

    Java问题宝典2012版

    12、静态变量和实例变量的区别? 13 13、是否可以从一个static方法内部发出对非static方法的调用? 13 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 14 16、下面的代码有...

    Java面试宝典2017.zip

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    Java面试宝典2020修订版V1.0.1.doc

    10、静态变量和实例变量的区别? 15 11、面向对象的基本特征是什么? 15 12、作用域public,private,protected,以及不写时的区别? 16 13、Overload和Override的区别。 16 14、构造器可不可以被重载或重写? 16 15、...

    java面试宝典

    77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private String name; public abstract boolean isStupidName(String name) {}}这有何错误? 18 79、public class ...

    java 面试常问的问题 如何回答

    12、静态变量和实例变量的区别? 12 13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有...

    java面试宝典2012版.pdf

    70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 71、说出一些常用的类,包,接口,请各举5个 72、java中有几种...

    Java面试宝典-经典

    70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中有...

    Java测试题2答案

    哪个关键字可以对对象加互斥锁? B A transient B synchronized C serialize D static 10.下列哪些语句关于内存回收的说明是正确的? B A 程序员必须创建一个线程来释放内存; B 内存回收程序...

    Java面试宝典2010版

    70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中有...

    java面试题大全(2012版)

    70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中有...

Global site tag (gtag.js) - Google Analytics