陕西省建设网站 五大员过期免费网站排名优化软件
1、对于staic同步方法锁住的是class类模板(Class对象) 对象是线程(调用者) 调用者只有获取资源的锁才能调用 2、普通同步方法 锁住的资源是class对象 对象是线程(调用者)即:
静态同步方法:
- 锁住的是类的
Class
对象。- 这意味着同一个类的所有静态同步方法之间是互斥的,不论是哪个实例调用这些方法。
普通同步方法:
- 锁住的是调用该方法的实例对象。
- 不同的实例可以并行执行它们的普通同步方法,因为它们各自锁住的是自己的对象。
1、锁住的东西不同可以视作不同的锁
2、进程只有获取锁 才能访问锁对应的方法等资源
3、如果锁不同 就不存在锁竞争
package com.example.mp.juc.lock8;import java.util.concurrent.TimeUnit;/*** @author Mr.Lan* @version 1.0* @ClassName Test1$* @description* @date 2025/2/22 20:46**/
public class Test1 {/*1、对于staic同步方法锁住的是class类模板(Class对象) 对象是线程(调用者) 调用者只有获取资源的锁才能调用* 2、普通同步方法 锁住的资源是class对象 对象是线程(调用者) * */public static void main(String[] args) throws InterruptedException {Phone4 phone4 = new Phone4();Phone4 phone5 = new Phone4();new Thread(()->{phone4.sendSms();}).start();TimeUnit.SECONDS.sleep(1);new Thread(()->{phone4.call();}).start();}
}
class Phone4{Phone4(){}public static synchronized void sendSms(){try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("发短信");}public synchronized void call(){System.out.println("打电话");}}