没有合适的资源?快使用搜索试试~ 我知道了~
笔记_张孝祥_Java多线程与并发库高级应用
5星 · 超过95%的资源 需积分: 16 61 下载量 88 浏览量
2016-03-28
20:17:58
上传
评论 3
收藏 577KB DOC 举报
温馨提示
试读
43页
张孝祥Java多线程与并发库高级应用学习笔记,很经典的学习多线程和并发的资料。张孝祥Java多线程讲义笔记由张孝祥亲自整理,很实用的。
资源推荐
资源详情
资源评论
张孝祥 多线程与并发库高级应用
【视频介绍:】
线程是一项非常基本和重要的技术,在偏底层和偏技术的 程序中不可避免地要
使用到 线程技术,特别是 手机程序和游戏开发中,多线程成了必不可少的一
项重要技术。但是,很多 程序员对 线程技术的了解都仅停留在初级阶段,在项目
中一旦涉及到多线程时往往就表现得糟糕至极,所以,软件公司常常使用 线程技术来
考察面试者的基本功和判断其编码水平的高低。
本套视频教程是专门为了帮助那些已经学习和了解过、但掌握得并不是很深入的人们提
高 线程技术而讲解的,所以, 线程初学者学习本视频教程时可能会比较吃力,可
能必须耐心学习多遍才能渐入佳境,但是,你一旦掌握了其中的内容,你对 线程技术
的了解将会相当出众!
【视频目录列表】
传统线程技术回顾
传统定时器技术回顾
传统线程互斥技术
传统线程同步通信技术
线程范围内共享变量的概念与作用
类及应用技巧
多个线程之间共享数据的方式探讨
原子性操作类的应用
线程并发库的应用
与 !"! 的应用
的线程锁技术
读写锁技术的妙用
条件阻塞 " 的应用
的 #$% 同步工具
的 &' 同步工具
的 !"()" 同步工具
的 *+, 同步工具
阻塞队列的应用
同步集合类的应用
空中网挑选实习生的面试题
空中网挑选实习生的面试题
空中网挑选实习生的面试题
源代码与资料
01. 传统线程技术回顾
传统是相对于 (- 而言的
传统线程技术与 (- 的线程并发库
线程就是程序的一条执行线索.线路。
创建线程的两种传统方式
创建 的子类/覆盖其中的 ! 方法/运行这个子类的 0"" 方法即可开启线程
"1)23
4 56
%!!23
4
)2"!3
4
获取当前线程对象 获取线程名字
!"23 "6,"7$23
让 线 程 暂 停 , 休 眠 , 此 方 法 会 抛 出 中 断 异 常
8"!%"*+%"
0%2毫秒值39
:
:
:9
"0""239
创建 时传递一个实现 ;! 接口的对象实例
"1)2);!23
4
%!!23
4:
:39
"0""239
问题:下边的线程运行的是 子类中的方法还是实现 ;! 接口类的方法
)2
、传递实现 ;! 接口的对象
);!23
4
%!!23
4:
:
34
、覆盖 子类 ! 方法
%!!234:
:0""239
分析:new Thread(Runnable.run()){run()}.start();
子类 run 方法实际就是覆盖父类中的 run 方法,如果覆盖了就用子类的 run 方法,不
会再找 Runnable 中的 run 方法了,所以运行的是子类中的 run 方法
总结:
由 类中的 ! 方法源代码中看出,两种传统创建线程的方式都是在调用
对象的 ! 方法,如果 对象的 ! 方法没有被覆盖,并且像上边的问题那样为
对象传递了一个 ;! 对象,就会调用 ;! 对象的 ! 方法。
多线程并不一定会提高程序的运行效率。举例:一个人同时在三张桌子做馒头
多线程下载:并不是自己电脑快了,而是抢到更多服务器资源。例:服务器为一个客
户分配一个 - 的线程下载,你用多个线程,服务器以为是多个用户就分配了多个 - 的
资源给你。
02. 传统定时器技术回顾
传统定时器的创建:直接使用定时器类 $
、过多长时间后炸
)$230!2$0< 定时任务/(""$ 定的时间39
、过多长时间后炸,以后每隔多少时间再炸
)$230!2$0< 定时任务/, 延迟2第一次执行3时间/, 间隔时间39
$0< 与 ;! 类似,有一个 ! 方法
$ 是定时器对象,到时间后会触发炸弹($0<)对象
示例:
)$230!2
)$0<23定时执行的任务
4
%!!23
4
#6=2>$,?39
:
显示计时信息
)2"!3
4
#6=2)("23,"#02339
0%239
:
:,
定好的延迟时间, 秒以后执行任务
39
问题: 秒后炸,爆炸后每隔 秒再炸一次
定时器 秒后炸,炸弹里还有定时器(每 秒炸一次)
00@&$0<+"0$0< 这就是准备用的子母弹
4
%!!23
4
本身就是一颗炸弹
#6=2$,39
内部子弹
)$230!2
)@&$0<23/
39
:
:
放置子母弹, 秒后引爆
)$230!2)@&$0<23/39
问题延伸:
上面的问题延伸,母弹炸过后,子弹每隔 秒炸一次,再每隔 秒炸一次
、在 @&$0< 内部定义一个静态变量记录炸弹号,在 ! 方法内将炸弹号加 ,
每次产生新炸弹,号码就会加 ,根据炸弹号判断是 秒炸还是 秒炸。
注意:内部类中不能声明静态变量
定义一个静态变量 %"0""!"19
在 ! 方法内部:!"1(!"A)B;
将定时器的时间设置为:AC!"
、用两个炸弹来完成,D 炸弹炸完后启动定时器安装 ' 炸弹,' 炸弹炸完后也启动一
个定时器安装 D 炸弹。
定时器还可以设置具体时间,如某年某月某日某时……可以设置周一到周五做某事,
自己设置的话需要换算日期时间,可以使用开源工具 E!"F 来完成。
03. 传统线程互斥技术
线程安全问题例子:银行转账
同一个账户一边进行出账操作(自己交学费),另一边进行入账操作(别人给自己付
款),线程不同步带来的安全问题
示例:逐个字符的方式打印字符串
006!"%!"
4
%!!"%!"2#",$3
4
"1$,"239
G2"19H9AA3
#6=2$D"2339逐个字符打印
#6=239换行
:
:
%!"0"23
4
6!"%!"!"%!"1)6!"%!"239
)2
);!23
4
%!!23
4
0%239
!"%!"!"%!"2>F,++,?39
:
:30""239
)2
);!23
4
%!!23
4
0%239
!"%!"!"%!"2>!$,?39
:
:30""239
:
注意:
内部类不能访问局部变量,要访问需加 G
静态方法中不能创建内部类的实例对象
打印结果发现的问题:线程不同步所致,两个线程都在使用同一个对象
要避免下边产生的问题,左边方法体中
的代码要实现原子性
有一个线程正在使用这个方法的代码,
别的线程就不能再使用。
就和厕所里的坑一样,已经有人在用
了,别人就不能再去用了。
中某段代码要实现排他性,就将这
段代码用 0&F 关键字保护起来。
同步锁可以用任意对象,相当于门锁
0&F ( $ )
4
G2"19H9AA3
#6=2$D"2339 逐个字符打印
#6=239 换行
:
这样的话,有一个线程进入保护区域
后,没出来的话,别的线程就不能进入保护
区域。
要实现互斥,在这个位置必
须使用同一个对象
使用 $ 就达不到同步效
果
使用 !"%!" 对象即
可达到同步效果
互斥方法:
、同步代码块
0&F2<34:
、同步方法
方法返回值前加 0&F
同步方法上边用的锁就是 "0 对象
静态同步方法使用的锁是该方法所在的 00 文件对象
使用 0&F 关键字实现互斥,要保证同步的地方使用的是同一个锁对象
%!0&F!"%!"2#",$3
4
"1$,"239
这里就不要再加同步了,加上极易出现死锁
G2"19H9AA3
#6=2$D"2339逐个字符打印
#6=239换行
:
04. 传统线程同步通信技术
面试题,子线程 次与主线程 次来回循环执行 次
下面是我刚看完面试题就暂停视频自己试着写的代码,还可以,结果完成要求了
在单次循环结束后让这个刚结束循环的线程休眠,保证另一个线程可以抢到执行权。
%!008"I)0"
4
.CC
C刚看到面试题没看答案之前试写
C子线程循环 次,回主线程循环 次,
C再到子线程循环 次,再回主线程循环 次
C如此循环 次
C.
%!0""$2#",JK,03
4
"!$19
)2!$AAH3
4
)2);!23
剩余42页未读,继续阅读
资源评论
- 尹成2017-01-16自己打包好的,可以直接调用,欢迎下载
- cozy_baby2018-08-04谢谢分享!看了4页了,目前为止很完整的!再次感谢!
- aeonelf2018-04-15谢谢分享,学习学习
该用户还未设置昵称
- 粉丝: 2
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功