JUC并发编程synchronized锁 代码案例及总结

目录

8种情况演示锁的案例

第一种情况:标准访问

第二种情况:加入延迟

第三种情况:添加非同步方法

第四种情况:实例化两个对象

第五种情况:两个静态同步方法,实例化一个对象

第六种情况:两个静态同步方法,实例化两个对象

第七种情况:静态同步方法,普通同步方法,实例化一个对象

第八种情况:静态同步方法,普通同步方法,实例化两个对象

总结


8种情况演示锁的案例

深入探究锁的奥秘

第一种情况:标准访问

描述:有两个线程a和b,分别调用sendEmailsendSMS方法,请问输出顺序如何?

结果:邮件 短信

class Phone {  
    public synchronized void sendEmail() {  
        System.out.println("----sendEmail");  
    }  
  
    public synchronized void sendSMS() {  
        System.out.println("----sendSMS");  
    }  
}  
  
public class LockDemo {  
    public static void main(String[] args) {  
        Phone phone = new Phone();  
  
        new Thread(() -> {  
            phone.sendEmail();  
        }, "a").start();  
  
        // 短暂暂停以确保a线程启动  
        try {  
            TimeUnit.MICROSECONDS.sleep(200);  
        } catch (InterruptedException e) {  
            throw new RuntimeException(e);  
        }  
  
        new Thread(() -> {  
            phone.sendSMS();  
        }, "b").start();  
    }  
}

第二种情况:加入延迟

描述:在sendEmail方法中加入3秒延迟,请问输出顺序如何?

结果:邮件 短信

class Phone {  
    public synchronized void sendEmail() {  
        try {
            // 延时3s
            TimeUnit.SECONDS.sleep(3);  
        } catch (InterruptedException e) {  
            throw new RuntimeException(e);  
        }  
        System.out.println("----sendEmail");  
    }  
  
    public synchronized void sendSMS() {  
        System.out.println("----sendSMS");  
    } 
}  
  
public class LockDemo {  
    public static void main(String[] args) {  
        Phone phone = new Phone();  
  
        new Thread(() -> {  
            phone.sendEmail();  
        }, "a").start();  
  
        // 短暂暂停以确保a线程启动  
        try {  
            TimeUnit.MICROSECONDS.sleep(200);  
        } catch (InterruptedException e) {  
            throw new RuntimeException(e);  
        }  
  
        new Thread(() -> {  
            phone.sendSMS();  
        }, "b").start();  
    }  
}
第三种情况:添加非同步方法

描述:在Phone类中添加一个非同步的hello方法,并同时调用sendEmailhello方法,请问输出顺序如何?

结果:hello 邮件


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值