java线程文档格式.docx
- 文档编号:22597684
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:11
- 大小:365.21KB
java线程文档格式.docx
《java线程文档格式.docx》由会员分享,可在线阅读,更多相关《java线程文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
--掌握
4.线程方法应用;
二线程
2.1线程
问题:
现在我需要下载一部小电影?
应该怎么做?
第一:
可以使用浏览器的下载器直接下载,但是速度较慢;
第二:
可以使用迅雷软件下载电影,速度快;
那么为什么使用迅雷下载电影要比浏览器下载快?
原因非常简单因为迅雷使用了多线程,浏览器使用单线程,所以我们要不要学线程。
线程应用:
迅雷、比特彗星,快播;
学习线程之前,我们首先搞清楚进程是什么?
进程:
正在运行的应用程序(看成正在执行的一些代码);
线程:
看成是进程中的最小单元,
一个进程中可以有1个或者多个线程(其实也就是一小段代码);
线程其实也可以看成是一个轻量级的进程;
(比如1个进程只有1个线程);
多线程下载软件为什么快?
CPU:
执行任务是以线程为单位;
会在不同的时间片上不断的切换线程;
分析多线程下载快的原因:
假设上面的每一个线程的优先级都一样,并且CPU的平均分配时间都相等,比如每一个时间片是一分钟,如果5个软件同时下载20分钟,快播一共8个线程,占用8个时间片,
共8分钟,CPU在上面处理时间最多,所以会更快;
但是不是说越多线程越快,如果电脑的内存只有128M,那开1000个线程,也会很慢;
2.2线程示例
示例:
一边玩游戏,一边播放音乐;
分析图示:
分析:
①希望实现可以一边玩游戏,一般播放背景音乐,使用两个打印语句模拟。
②把上面的两件事情封装成两个独立的线程,如何封装?
借助Java中Thread类。
③Thread类提供两个方法,一个run()方法(线程主体run方法),一个start()方法(启动一个线程)
④自定义两个类,继承Thread类,覆写run方法;
最后在测试类,启动两个线程
2.3启动线程(实现Runnable方式)
回顾一下,一边打游戏,一边播放音乐是怎样实现的?
通过一个类,去实现Thread这个类,然后覆写里面的run方法,然后创建一个类的对象,
调用start方法进行启动;
那我们先来系统的了解一下Thread这个类.
Thread类实现了Runnable接口,覆写里面的方法run方法,所以Thread类的run方法,也是来自Runnable接口;
实现线程方式:
①继承Thead类,覆写run方法,创建对象调用start方法启动线程
②实现Runnable接口,覆写run方法,创建线程对象(newThread(实例)),启动线程.
如下图示:
代码实现:
2.4启动线程两种方式
启动线程两种方式:
①通过继承Thread类
②实现Runnable接口
使用哪种方式更好?
区别:
一个类如果继承了其他类,就无法在继承Thread类,在Java中,一个类只能继承一个类,而一个类如果实现了一个接口,还可以实现其他接口,接口是可以多实现的,所以说
Runable的扩展性更强;
启动线程流程:
创建启动线程的方式一:
继承Thread类
①明确需要把什么事情封装成线程对象;
②自定义类extendsThread类
③覆写run方法:
写①
④创建自定义对象t
⑤启动线程t.start();
创建启动线程方式二:
实现Runnable接口
①明确需要把什么事情封装成线程对象;
②自定义类implementsRunnable接口
⑤启动线程newThread(t).start();
示例:
直接写一个简单的HelloWorld程序,有没有线程?
有一个主线程,在垃圾回收的时候,有gc线程。
如果把创建线程放在循环语句的上面,会交替出现吗?
可能会,可能不会,可能出现for循环完之后,线程还没有启动完;
结论:
一旦线程启动起来之后就是独立的,和创建环境没有关系;
启动线程不能直接调用run方法,必须调用start方法;
2.5线程方法
了解启动线程的两种方式,继承Thread类或者实现Runnable接口,覆写里面的run方法,那除了run方法以外,还有没有其他什么方法?
Thread类的方法:
staticvoidsleep(longmillis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行);
示例:
2.6线程(sleep)应用
刚才我们已经学习了sleep方法,表示让线程休眠,里面是传入个毫秒。
那用这个方法,我们能做什么事情,可以在什么方面进行应用呢?
2.6.1简易倒计时
倒计时:
publicstaticvoidmain(String[]args){
for(inti=10;
i<
=0;
i--){
System.out.println(i);
Thread.sleep(1000);
}
2.6.2窗体倒计时
窗体显示倒计时:
分析:
①需要一个JFrame,Label组件
②设置字体label.setFont(newFont(“宋体”),Font.BOLD,600);
③给Label设置值label.setText(Stringi)方法;
2.7作业
1.什么是线程,什么是进程,线程和进程的关系是什么?
2.练习两种方式创建线程;
3.完成倒计时的功能;
4.分析写出程序结果,写出分析步骤:
publicclassTest{
publicstaticvoidmain(String[]args){
try{
showExce();
System.out.println("
A"
);
}catch(Exceptione){
B"
}finally{
C"
}
System.out.println("
D"
publicstaticvoidshowExce()throwsException{
thrownewException();
}
publicstaticvoidfunc(){
thrownewException();
publicstaticvoidmain(Stringargs[]){
func();
6.自定义一个异常,模拟用户名重复的场景,当用户名重复,产生一个重复异常;
如果没有重复,则注册成功;
7.Java中final,finalize,finally关键字的区别;
8.Java中throw和throws的区别;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 线程