06 004【JUC】java多线程之八锁案例

八锁案例

个人感觉需要判断是否加锁,加的是否为同一把锁,同一把锁需要等待,不同的锁不用等待。

package com.magic.juc0117;

import java.util.concurrent.TimeUnit;

/**
 * 1.标准访问,先打印邮件还是短信?
 * 绝不会同时进去,只要在一个资源类里面,不管他有多少同步方法,只要一个线程先访问了资源类里
 * 的任何一个同步方法,锁的是该方法所在的资源类,即锁的是这个对象。
 * 2.暂停4秒邮件方法,先打印邮件还是短信?  
 * 邮件 同一把锁,要等待
 * 3.新增普通sayHello方法,请问先打印邮件还是短信? hello,没加锁
 * 不是同步方法,不受锁的影响,所以不需要等待。其他线程共用了一把锁,所以还需要等待。
 * 4.两部手机,请问先打印邮件还是短信? 
 * 短信,两把不同锁,不用等待
 * 5.两个静态同步方法,同一部手机,请问先打印邮件还是短信? 等待1秒 邮件 短信
 * 被synchronized和static修饰的方法,锁的对象是类的class对象。因为两个同步方法都被static修饰了,
 * 所以两个方法用的是同一个锁,后调用的方法需要等待先调用的方法。
 * 6.两个静态同步方法,两部手机,请问先打印邮件还是短信? 邮件
 * 锁的都是类的Class对象,其实还是同一把锁,需要等待。
 * 7.一个静态同步方法,一个普通同步方法,同一部手机,请问先打印邮件还是短信? 短信
 * 被synchronized和static修饰的方法,锁的对象是类的class对象。仅仅被synchronized修饰的方法,锁的对象是方法的调用者。
 * 因为两个方法锁的对象不是同一个,所以两个方法用的不是同一个锁,后调用的方法不需要等待先调用的方法。
 * 8.一个静态同步方法,一个普通同步方法,两部手机,请问先打印邮件还是短信? 短信
 * 不是同一把锁,不用等待
 */
class Phone{
    public static synchronized void sendEmail() throws Exception {
        TimeUnit.SECONDS.sleep(4);//暂停4秒 后面也一直在
        System.out.println("sendEmail----------");
    }

    public synchronized void sendSMS() throws  Exception{
        System.out.println("sendSMS-------------");
    }

    public void sayHello() throws  Exception{
        System.out.println("hello");
    }
}

public class Lock8Demo05 {

    public static void main(String[] args) throws Exception {
        Phone phone = new Phone();
        Phone phone2 = new Phone();

        new Thread(() -> {
            try {
                System.out.println("s1");
                phone.sendEmail();
            } catch (Exception e) {
                e.printStackTrace();
            }
        },"A").start();
        Thread.sleep(1000);
        new Thread(() -> {
            try {
                System.out.println("s2");
                phone2.sendSMS();
            } catch (Exception e) {
                e.printStackTrace();
            }
        },"B").start();

        new Thread(() -> {
            try {
                phone.sayHello();
            } catch (Exception e) {
                e.printStackTrace();
            }
        },"C").start();
    }
}

学习整理于JUC.

发布了53 篇原创文章 · 获赞 0 · 访问量 372

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/104039402