其他分享
首页 > 其他分享> > 多线程问题(三)

多线程问题(三)

作者:互联网

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

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()方法已经执行完成

标签:void,System,问题,Phone,new,多线程,public,sendMsg
来源: https://blog.csdn.net/qq_39056081/article/details/114284137