miluframe({ /*个人链接地址*/ Youself:'https://www.cnblogs.com/miluluyo/', /*导航栏信息*/ custom:[{ name:'留言板', link:'https://www.cnblogs.com/miluluyo/p/11578505.html', istarget:false },{ name:'技能树', link:'https://miluluyo.github.io/', istarget:true }], /*自己的友链页面后缀*/ Friends_of_the:'p/11633791.html', /*自己的友链信息*/ resume:{ "name":"麋鹿鲁哟", "link":"https://www.cnblogs.com/miluluyo", "headurl":"https://images.cnblogs.com/cnblogs_com/elkyo/1558759/o_o_my.jpg", "introduction":"大道至简,知易行难。" }, /*友链信息*/ unionbox:[{ "name":"麋鹿鲁哟", "introduction":"生活是没有标准答案的。", "url":"https://www.cnblogs.com/miluluyo", "headurl":"https://images.cnblogs.com/cnblogs_com/elkyo/1558759/o_o_my.jpg" },{ "name":"麋鹿鲁哟的技能树", "introduction":"大道至简,知易行难。", "url":"https://miluluyo.github.io/", "headurl":"https://images.cnblogs.com/cnblogs_com/elkyo/1558759/o_o_my.jpg" }], /*点击页面时候的弹出文本显示*/ clicktext:new Array("ヾ(◍°∇°◍)ノ゙加油哟~ ——麋鹿鲁哟","生活是没有标准答案的。 ——麋鹿鲁哟"), /*github链接*/ githuburl:'https://github.com/miluluyo' })

2022-08-03 第三小组 陈迪 学习笔记

锁:

1、synchronized多线程并发编程。

重量级锁。jdk1.6进行了优化。

jdk1.6为了减少获得锁和释放锁带来的性能消耗引入的偏向锁和轻量级锁

synchronized有三种方式加锁,分别是:

1、修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。

2、静态方法,作用于当前类对象加锁,进入同步代码之前要获得的当前类对象的锁。

3、代码块,指定加锁对象,对给定的对象加锁,进入同步代码块之前要获得给定对象的锁。

1、实例方法:调用该方法的实例

2、静态方法:类对象 Ch01.class

3、this:调用该方法的实例对象

4、类对象:类对象

操作共享数据的代码

共享数据:多个线程共同操作的变量,

当使用同步方法是时,synchronized0锁的是this(默认的)

关于同步方法:

1、同步方法依然涉及到同步锁对象

2、费静态的同步方法,同步锁就是this

静态的同步方法,同步监视器就是累本身

同步代码块:

1、选好同步监视器推荐使用类对象,第三方对象,this

2、在实现接口创建的线程类中,同步代码块不可以用this来充当同步锁

同步的方式,解决线程安全的问题

操作同步代码块,只有一个线程能够参与,其它等待,效率低

synchronized只针对于当前jvm可以解决线程安全问题。不可以跨jvm解决问题。

死锁:

多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源的释放,由于线程无限期阻塞,程序就不能正常终止

JAVA死锁产生四个必要条件

1、互斥使用,当资源被一个线程使用,别的线程不能使用。

2、不可抢占,资源请求者不能强制从占有者中抢夺资源,资源只能从占有者手动释放

3、请求和保持

4、循环等待,存在一个等待队列,P1占有P2的资源,P2占有P3的资源,P3占有P1的资源,形成了一个等待环路。

线程重入:

任意线程在拿到锁之后,再次获取该锁不会被该锁阻碍

线程不会被自己锁死,这就叫线程重入,synchronized可以重入锁。

jdk1.6以后锁升级:

1、无锁,不加锁。

2、偏向锁:不锁锁,只有一个线程争夺时,偏向某一个线程,这个线程不加锁。

3、轻量级锁:少量线程来了以后,先尝试自旋,不挂起线程

4、重量级锁:排队挂起线程,(synchronized)

挂起线程和恢复线程需要转入内核态中完成这些操作。

wait():当前线程进入等待状态,传参会自己醒来

notify():唤醒正在等待的下一个线程

notifyAll():唤醒正在等待的所有线程

线程间的通信

方法总结:

1、Thread的两个静态方法

sleep释放CPU资源,但是不会释放锁

yield方法释放cpu执行权,保留了cpu的执行资格,不常用。

2、join方法,yield出让了执行权,join就加入进来。

3、wait:释放cpu资源,释放锁

notify:唤醒等待中的线程

notifyAll:唤醒等待中的所有线程

面试题:sleep和wait的区别?

1、出处

2、释放锁

案例:生产者与消费者模型

两条线程,一条生产产品,另一条消费产品

思路:

这两条线程,初始状态是什么情况?

电脑工厂,生产电脑是需要时间。生产完毕100台电脑。

唤醒消费者

消费者:等待 被唤醒 100台电脑都卖出去了,等待

线程的退出:

使用退出标志,线程正常退出,run方法结束后线程终止

interrupt方法:中断线程

调用interrupt方法会抛出InterruptedException异常

线程的常用方法:

Thread类中的方法

1、start:启动当前线程,执行run方法

2、run:

3、currentThread:静态方法,获取当前正在执行的线程。

4、getId()

5、setName()

6、getName()

心得体会

今天学习了多线程里面的锁,理解起来比较难,好多地方都不太能听懂,晚上自习多请教同学。

posted @   jinjidecainiao  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
@media only screen and (max-width: 767px){ #sidebar_search_box input[type=text]{width:calc(100% - 24px)} } L2Dwidget.init({ "model": { jsonPath: "https://unpkg.com/live2d-widget-model-hijiki/assets/hijiki.model.json", "scale": 1 }, "display": { "position": "left", "width": 100, "height": 200, "hOffset": 70, "vOffset": 0 }, "mobile": { "show": true, "scale": 0.5 }, "react": { "opacityDefault": 0.7, "opacityOnHover": 0.2 } }); window.onload = function(){ $("#live2dcanvas").attr("style","position: fixed; opacity: 0.7; left: 70px; bottom: 0px; z-index: 1; pointer-events: none;") } 参数说明 名称 类型 默认值/实例 描述Youself 字符串 https://www.cnblogs.com/miluluyo/ 个人博客园首链接 custom 数组 [{ name:'相册', link:'https://www.cnblogs.com/elkyo/gallery.html', istarget:false },{ name:'技能树', link:'https://miluluyo.github.io/', istarget:true },{ name:'留言板', link:'https://miluluyo.github.io/p/11578505.html', istarget:false }] 导航信息 name 导航名 link 导航链接 istarget true跳转到新页面上,false当前页面打开 Friends_of_the 字符串 11633791 友链文章的后缀名,若字符串为空则不显示友链 resume 对象 { "name":"麋鹿鲁哟", "link":"https://www.cnblogs.com/miluluyo/", "headurl":"https://images.cnblogs.com/cnblogs_com/ elkyo/1558759/o_o_my.jpg", "introduction":"大道至简,知易行难。" } 自己的友链信息 name 导航名 link 导航链接 headurl 头像 introduction 语录 unionbox 数组 [{ "name":"麋鹿鲁哟", "introduction":"生活是没有标准答案的。", "url":"https://www.cnblogs.com/miluluyo", "headurl":"https://images.cnblogs.com/cnblogs_com/ elkyo/1558759/o_o_my.jpg" },{ "name":"麋鹿鲁哟的技能树", "introduction":"大道至简,知易行难。", "url":"https://miluluyo.github.io/", "headurl":"https://images.cnblogs.com/cnblogs_com/ elkyo/1558759/o_o_my.jpg" }] 友链数组 name 昵称 introduction 标语 url 链接地址 headurl 头像地址 clicktext 新数组 new Array("ヾ(◍°∇°◍)ノ゙加油哟~ ——麋鹿鲁哟", "生活是没有标准答案的。 ——麋鹿鲁哟"), 点击页面时候的弹出显示 githuburl 字符串 https://github.com/miluluyo github链接
点击右上角即可分享
微信分享提示