Java类加载过程,多线程运行状态


类加载

System.oUt.println(B.num);//100,如果直接使用类的静态属性,也会导致类的加载
class B{
    static{
        System.oUt.println("B静态代码块被执行");
        nUm=300:
    }
}

image-20230817141413879

//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关键字的。

  目录