代码准备
代码准备如下:
被线程操作的资源类Phone,包含两个synchronized同步方法(发邮件和发短信)
main方法中new出一个Phone实例对象,并创建A,B两个线程去调用phone对象
package com.bnuz.JUCDemo;
import java.util.concurrent.TimeUnit;
/*
* 8锁问题分析,以下八种情形:
* 1.标准访问,先发送邮件还是短信
* 2.在邮件方法内暂停4秒,先发送邮件还是短信
* 3.新增普通的hello方法,先打印hello还是先发送邮件
* 4.现有两个手机实例对象,先打印短信还是先发送邮件
* 5.2个静态同步方法,一个手机实例,先发短信还是先发邮件
* 6.2个静态同步方法,两个手机实例,先发短信还是先发邮件
* 7.1个静态同步方法,1个普通同步方法,一个手机实例,先发短信还是先发邮件
* 8.1个静态同步方法,1个普通同步方法,两个手机实例,先发短信还是先发邮件
* */
class Phone{
public synchronized void send_email()throws Exception{
//TimeUnit.SECONDS.sleep(4);
System.out.println("-------send e-mail-----");
}
public synchronized void send_message()throws Exception{
System.out.println("-------send message-----");
}
}
public class Thread8LocksDemo {
public static void main(String[] args) throws InterruptedException {
Phone phone = new Phone();
new Thread(() -