清华大学《Java语言程序设计进阶》公开课总结

点击查看:原文
本文是清华大学许斌老师的公开课:Java语言程序设计进阶 的课堂笔记,快速复习一下,时间有限,因此大量直接截图。许斌老师声明:没有配套讲义,建议参考书籍:周志明《深入理解java虚拟机》。(JUC) java.utile.concurrency 部分参考源码和技术博客。

文章目录

第一章 线程(上)

1.0 导学

1539008813620

1539008859039

1.1 线程的基本概念

1539009969070

1539009984077

1539009143304

1539009203189

1539009430772

1539009574503

1539009665675

1.2 通过Thread类创建线程

1539009918717

1539406861072

1539406869998

1539406876613

1539406882916

1539406887715

1539406895994

1.3 线程的休眠

1539010059187

1539010375863

1539010405934

1539010618493

1539011791263

1539011800469

1539011806430

:线程休眠的原因就是让其他线程有执行的机会

1.4 Thread类详解

1539012104103

1539012342296

:线程启动(即调用start方法)并不意味着线程马上运行,线程是否运行取决于线程调度器。

1539012415734

1.5 通过Runnable接口创建线程

1539012516154

1539012651662

1539012759620

1539012814520

1539012944363

1539012958930

1539013125468

:Runnable接口中我们所实现的run方法就是我们这个线程想要执行的代码

1.6 线程内部的数据共享

同样一个线程类,它可以实例化出很多线程。同样一个线程,它们是可以共享它们的代码和数据,那也就是说当我们实现了Runnable接口的这个类,它所实例出来的对象的话,它去构造出的线程,它们之间是可以共享它们的代码和它们之间的一些数据的。

1539013882402

1539012958930

1539014130891

1539014260700

1539014850716

1539014878920

1539016663199

小结

1539016705556

第二章 线程(中)

2.0 导学

1539016795632

1539016830468

2.1 线程同步的思路

1539017054833

1539017181751

1539017224926

1539017381221

1539017485915

1539017568234

1539017702394

1539017744493

:那原因就是在于说这两个线程的话,它们是同一优先级,只不过是说这个producer先这个排在前面,所以的话从调度上,往往会调度它这个producer先执行,那它一执行呢就把这个票都生产完了,然后再等待着卖票的程序把它去卖掉,这是一种有意思的这个现象

1539017987439

2.2 线程同步的实现方式—Synchronization

1539018289399

1539018392108

1539018487545

1539018879503

:把这两行代码变成一个(原子)操作,就是在执行过程中不可能被打散执行

1539019284302

:用synchronized后面大括号括起来其实是代码,实际上它把它变成一个原子操作,也就是说当我拿到这个对象t的锁的时候,我这里面的这些代码是肯定都会被执行的,不会说我执行某一句以后就被这个打断,然后那个插入别的线程去执行去访问这个对象t,所以这个是synchronized它的很重要的作用。

1539019370141

1539019483438

1539019531529

1539019552318

1539019688049

就像刚才我们那个例子:我们在这个售票线程里面,每售出来票的时候,它就会休眠一毫秒,但休眠一毫秒的时候,它不会释放出它所占有的这个ticket对象的锁的,它一直会持有,所以这是一个独特的一个地方。

1539023144629

2.3 线程的等待与唤醒

1539071230986

1539071238290

:那现在wait notify notifyAll方法这三个方法都属于object这个类的方法,也就意味着我们java当中所有的类它都有这个三个方法

1539071537462

:修改之后,相当于票箱大小为1,Tickets.size = 1。Tickets.put() 方法中的 notify() 与 Tickets.sell() 方法中的wait()一一对应,Tickets.put() 方法中的 wait() 与 Tickets.sell() 方法中的notify()一一对应。

1539071636937

2.4 后台进程

1539072724499

1539072801199

2.5 线程的生命周期与死锁

1539076855969

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值