多线程问题(三)

同一个类,一个普通同步方法,一个静态同步方法,两个线程分别调用这个类的不同对象

public class LockTest03 {
    public static void main(String[] args) throws InterruptedException {

        Phone phone1=new Phone();
        Phone phone2=new Phone();
        // 打电话
        new Thread(()->phone1.call()).start();
        // 睡眠1s
        TimeUnit.MILLISECONDS.sleep(1000L);
        // 发短信
        new Thread(()->phone2.sendMsg()).start();
    }
}

// 手机类
class Phone{
    // 打电话
    public static synchronized void call()  {
        try {
            TimeUnit.MILLISECONDS.sleep(3000L);
            System.out.println("打电话");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // 发短信
    public synchronized void sendMsg(){
        System.out.println("发短信");
    }

    // say hello
    public void sayHello(){
        System.out.println("hello");
    }
}

结果
多线程问题(三)
普通同步方法锁的是对象,静态同步方法锁的是Class,所以这里有两个锁,两个调用方法的线程互不影响,在call()方法的线程还在休眠时,sendMsg()方法已经执行完成

上一篇:【144期】考考基础部分,你能说出 TreeMap 原理实现及常用方法吗?


下一篇:TCP/IP协议栈在Linux内核中的运行时序分析