本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
1.标准访问,先打印苹果还是android ? 先IOS再Android 2.睡觉4秒钟,先打印苹果还是android? 先IOS再Android
得出结论:类中有多个同步方法,同一时间内,只能有一个线程进行访问这些方法中的一个 也就是锁是当前对象this,synchronized是对象锁不是在方法上加锁,锁的是Phone()对象(object monitor) 被锁定后其他线程都不能进入到当前对象的其他synchronized方法
3.新增hello方法,先打印苹果还是hello? 先hello再IOS(吃面条和玩手机互不相干) 新增hello方法并不是同步方法所以互不影响
4.有两部手机,先打印苹果还是android? 先Android再IOS 多个线程抢一个资源,如果有两部手机,打电话互不影响 第一个锁的是phone 第二个锁的是phone1
5.两个静态同步方法,有一部手机,先打印苹果还是android? 先IOS再Android 6.两个静态同步方法,有2部手机,先打印苹果还是android? 先IOS再Android 静态方法锁,锁定的是phone.class这个模板,无论创建几个phone对象都是在一起锁着
7.一个静态同步方法,一个普通同步方法,有一部手机,先打印苹果还是android? 先Android再IOS 8.一个静态同步方法,一个普通同步方法,有2部手机,先打印苹果还是android? 先Android再IOS 一个是phone.class锁 一个是this对象phone锁 两个锁互不影响 一部手机苹果,一部手机苹果1,然后还有一个类锁和一个对象锁依然互不影响
package juc;
import java.util.concurrent.TimeUnit;
class GetPhone{
public static synchronized void getIOS() throws InterruptedException{
TimeUnit.SECONDS.sleep(3);
System.out.println("得到IOS手机");
}
public static synchronized void getAndroid(){
System.out.println("得到Android手机");
}
public void getHello(){
System.out.println("hello");
}
}
/*
标准访问,先打印苹果还是android ? 先IOS再Android
睡觉4秒钟,先打印苹果还是android? 先IOS再Android
新增he11o方法,先打印苹果还是hello? 先hello再IOS
有两部手机,先打印苹果还是android? 先Android再IOS
两个静态同步方法,有一部手机,先打印苹果还是android? 先IOS再Android
两个静态同步方法,有2部手机,先打印苹果还是android? 先IOS再Android
一个静态同步方法,一个普通同步方法,有一部手机,先打印苹果还是android? 先Android再IOS
一个静态同步方法,一个普通同步方法,有2部手机,先打印苹果还是android? 先Android再IOS
*/
public class EightLockDemo {
public static void main(String[] args){
GetPhone phone = new GetPhone();
GetPhone phone1= new GetPhone();
new Thread(()->{
try {
phone.getIOS();
}catch (Exception e){
e.printStackTrace();
}
},"AA").start();
new Thread(()->{
phone.getAndroid();
//phone.getHello();
//phone1.getAndroid();
},"BB").start();
}
}