多线程笔记
写在前面的话
- Java中的多线程是一项非常重要的学习内容。多线程的引入强化了程序的执行能力,提高了程序的执行效率。那么多线程到底是神马呢?本文将更随毕向东老师的思路揭开多线程的谜底。
- 本文笔记是除了在《毕向东Java基础》视频的基础上所做的笔记之外,还做深层的扩展。
多线程概念
认识进程
- 在认识多线程之前,我们需要先了解“进程”这个概念。那么什么是进程呢?进程是操作系统的基础,它是程序的一次执行。即是程序完成的一次由开始到结束的执行过程。进程包括运行中的程序和程序所使用到的内存和系统资源,而一个进程又是由多个线程所组成的。
- 参考:进程
认识线程
- 那么什么又是线程呢?线程其实是进程当中的一个执行路径,它是进程中的一个独立的控制单元。每个进程都可以包含多个执行路径,每个进程必须包含一个线程,叫做进程的主线程。
- 参考:线程
认识多线程
- 多线程就是指一个进程中包含多个执行路径,即是在一个程序中可以同时运行多个不同的线程来执行不同的任务。最简单的例子就是JVM,JVM是一个多线程的进程,它启动之后不止一个线程,还包括了垃圾回收的线程。
为什么需要线程
- 可以提高程序的运行效率
- 可以优化程序的执行能力
多线程的实现(Java)
- 查阅api文档,可以知道Java多线程的实现有2种方法。第一种是继承java.lang.Thread类;第二种是实现java.lang.Runnable接口。
继承java.lang.Thread类的多线程实现
- 步骤:
- 定义一个类,继承java.lang.Thread类
- 复写Thread类中的run()方法,目的:将自定义的代码存储在run方法中,让线程运行。
- 调用线程的start()方法,该类有2个作用:启动线程和调用run()方法。
- 代码实现
1 | // 定义一个类,继承java.lang.Thread类 |
- 运行结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25demo run!------0
demo run!------1
demo run!------2
Hello World run!---------0
demo run!------3
Hello World run!---------1
demo run!------4
Hello World run!---------2
demo run!------5
demo run!------6
demo run!------7
demo run!------8
....
....
Hello World run!---------31
demo run!------29
Hello World run!---------32
demo run!------30
Hello World run!---------33
demo run!------31
Hello World run!---------34
...
...
Hello World run!---------58
Hello World run!---------59 - 结果分析:发现每次运行的结果都不一样
- (单核CPU)某个时刻只能执行一个线程
- 不同的线程都在抢夺CPU的执行权,谁抢到谁执行
- CPU做着快速的切换,所以看起来像是多个线程同时在运行
- CPU的随机性,它想执行哪个线程,哪个线程才可以被执行
为什么要复写Thread类当中的run()方法呢?
为什么是调用start()方法而不是run()方法呢?
实现java.lang.Runnable接口的多线程实现
线程的运行状态
后记
参考链接
- 本文标题:多线程笔记
- 创建时间:2014-12-26 11:13:38
- 本文链接:2014/12/26/alogrithms/Multithreading-note/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论