栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java多线程------锁

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java多线程------锁

java之锁问题:
学习B站狂神视频总结:
代码不执行,仅示例参考

import java.util.concurrent.TimeUnit;

public class Lock {
    public static void main(String[] args) {
        
        Phone phone = new Phone();
        Phone phone1 = new Phone();
        Phone phone2 = new Phone();
      
        new Thread(()->{
            //phone.sendSms();
            phone1.sendSms();
        },"A").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(()->{
            //phone.call();
            phone2.call();
        },"B").start();
    }
}
class Phone{
    
    public static synchronized void sendSms(){
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发短信");
    }

    public static synchronized void call(){
        System.out.println("打电话");
    }
    
    public void listening(){
        System.out.println("听歌");
    }

}

synchronized加锁:重度锁,谁拿到锁就会阻塞,必须执行完才会释放

锁的对象是方法的调用者,谁先拿到谁执行

锁方法的时候:锁的是类的实例,谁先拿到锁谁就执行

注:没有锁的普通方法不受锁的影响

环境:

创建AB线程,休眠1毫秒,控制A先创建B后创建

两个方法:发短信需要4毫秒休眠才执行,打电话直接执行

序号同步方法静态同步方法对象执行结果分析
121发短信:一把锁,线程A先拿到锁先执行
222打电话:两把锁,发短信不需要睡眠先执行
321发短信:唯一类锁, 线程A先拿到
422发短信:唯一类锁, 线程A先拿到
5111打电话:两个锁,一个锁类模板,一个锁调用者,不存在线程等待问题,按照方法睡眠时间执行
6112打电话:两个方法用的不是同一个锁,互不影响

1.两个同步方法;一个对象

2.两个同步方法;两个对象(即两个调用者,两把锁)

​ 此时根据睡眠时间执行

3.两个静态同步方法(static):static方法在类加载时就有了,锁的是Class对象(每个类唯一);

​ 两个静态同步方法,如果是两个对象

​ 也只有一个类模板,锁的是Class;不受创建对象数量的影响

4.普通同步方法,静态同步方法,一个对象

​ 普通同步方法 锁的是Class模板

​ 静态同步方法 锁的是调用者

​ 两个方法用的不是同一个锁,互不影响

5.普通同步方法,静态同步方法,两个对象

​ 普通同步方法 锁的是Class模板

​ 静态同步方法 锁的是调用者

​ 两个方法用的不是同一个锁,互不影响

总结:

new :具体的对象

static:唯一的Class模板

如果是同一个锁,就看谁先拿到锁;如果不是同一个锁,就看睡眠了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号