类加载
System.oUt.println(B.num);//100,如果直接使用类的静态属性,也会导致类的加载
class B{
static{
System.oUt.println("B静态代码块被执行");
nUm=300:
}
}
//1.public synchronized void sell(){}就是一个同步方法
//2.这时锁在this对象
//3.也可以在代码块上写synchronize,同步代码块,互斥锁还是在this对象
非静态方法可用this代替
public void m2(){
synchronized (this){
System.out.println("m2");
}
}
//1,public synchronized static void m1(){}锁是加在SellTicketo.3.class
//2。如果在静态方法中,实现一个同步代码块。
静态方法要用类名.class
public static void m2(){
synchronized (SellTicket03.class){
System.out.println("m2");
}
}
互斥锁。
注意事项和细节
1.同步方法如果没有使用static修饰:默认锁对象为this
2.如果方法使用static修饰,默认锁对象:当前类.class
3.实现的落地步骤:
- 需要先分析上锁的代码
- 选择同步代码块或同步方法
- 要求多个线程的锁对象为同一个即可!
使用静态方法、实例方法对的三点注意事顶
- 静态方法中可以直接访问类的成员,不可以直接访问实例成员。
- 实例方法中既可以直接访问类成员,也可以直接访问实例成员。
- 实例方法中可以出现this关键字,静态方法中不可以出现this关键字的。