day15-多线程2
1、 画图说明线程的生命周期,以及各状态切换使用到的方法等

2、 同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。
理解:
同步监视器就是一把锁,当一个线程进入同步代码块并且拿到这个锁,外面的线程就进不来,只能等待当前线程运行完同步代码块,释放锁之后才能进入
共享数据就是多个线程都会进行操作的数据,会引发线程安全问题。
注意点:
同步代码块里的同步监视器,多个线程必须共用,且是唯一的。
对于多个线程处理共享数据,需要注意线程安全问题
3、sleep()和wait()的区别
sleep() 让线程睡眠一段时间,wait()让线程进入阻塞状态,直到被唤醒
sleep() 声明在Thread类中,wait()声明在java.lang.Object类中
sleep() 可以使用在任何需要使用的地方,wait()只能使用在同步代码块或同步方法中,且调用者只能是同步监视器
sleep()不会主动释放锁,调用wait() 会zhu'd
4、写一个线程安全的懒汉式
public class People { private static People people; private People(){} public static People getInstance(){ if(people == null){ sysnchronized(People.class){ if(people == null){ people = new People() } } } return people; } }
5、创建多线程有哪几种方式:4种
1、继承Thread类
2、实现Runnable接口
3、实现Callable接口
4、使用线程池进行创建
本文作者:huxingxin
本文链接:https://www.cnblogs.com/huxingxin/articles/17023958.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)