Java多线程 6 静态同步方法的锁
2013-09-18 23:58
316 查看
对于静态同步方法,加在上面的锁就是其存在的类本身
package thread; /* 如果同步函数被静态修饰后,使用的锁是什么呢? 通过验证,发现不在是this。因为静态方法中也不可以定义this。 静态进内存是,内存中没有本类对象,但是一定有该类对应的字节码文件对象。 类名.class 该对象的类型是Class 静态的同步方法,使用的锁是该方法所在类的字节码文件对象。 类名.class 对于单例模式,如果是使用懒汉模式(延迟加载)(饿汉模式是类加载的时候直接初始化对象),则其getInstance方法需要加锁: public static Single getInstance(){ if(s==null){ //建立实例之后就不用再检查锁,提高效率 synchronized(Single.class){ //同步锁使用该类 if(s==null) s = new Single(); } } return s; } */ public class Thread_4_SynMethodDemo3 { public static void main(String[] args){ Ticket4 t = new Ticket4(); Thread t1 = new Thread(t); Thread t2 = new Thread(t); t1.start(); try{Thread.sleep(10);}catch(Exception e){} t.flag = false; t2.start(); } } class Ticket4 implements Runnable{ private static int tick = 100; Object obj = new Object(); boolean flag = true; public void run(){ if(flag){ while(true) { synchronized(Ticket4.class) { //这样就喝静态同步方法一样了,用了同样的锁 //synchronized(obj){ //这样会导致危险 if(tick>0){ try{Thread.sleep(10);}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"....code : "+ tick--); } } } } else while(true) show(); } public static synchronized void show(){ if(tick>0){ try{Thread.sleep(10);}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"....show.... : "+ tick--); } } }
相关文章推荐
- Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)
- java多线程之-----静态同步synchronized方法与synchronized(class) 代码块
- 多线程有几种实现方法?同步有几种实现方法?静态同步方法和非静态有何不同?—— Java经典面试题系列
- (Java多线程)分析静态方法所适用的同步监视器对象是什么?
- java 多线程10:synchronized锁机制 之 锁定类静态方法 和锁定类.Class 和 数据String的常量池特性 同步静态方法
- java synchronized静态同步方法与非静态同步方法,同步语句块
- JAVA静态方法同步
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁
- java 多线程的同步几种方法
- Java: synchronized详解,静态同步方法,普通同步方法,同步代码块
- Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
- Java多线程对耗时方法的同步问题
- java多线程-静态同步函数的锁是Class对象
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 多线程陷阱(不要调用run方法;静态的同步方法)
- java多线程有几种实现方法?线程之间如何同步
- java多线程之-----对象及变量的并发访问1(synchronized同步方法)
- JAVA 多线程静态同步函数的锁是class 对象
- java多线程实现火车售票系统 以及java中的同步的实现 同步块 和同步方法同时 同步
- java同步静态方法与非静态方法(使用synchronized关键字)