转载:http://baijiahao.baidu.com/s?id=1602265641578157555&wfr=spider&for=pc
前言
线程是程序的一条执行线索,执行路径,是程序使用cpu的最小单位。线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的。
多线程的意义
其实任何一个程序的执行都需要获得cpu的执行权,是由cpu来去决定到底是由哪个程序来去执行,那么多线程的存在其实就是“最大限度的利用cpu资源”,当某一个线程的处理不需要占用cpu而之和I/O打交道的时候,让需要占用cpu资源的其他线程有机会获得cpu资源。从根本上说,这就是说多线程编程的目的。
多线程的目的
不同于其他大多数编程语言,Java本身内置了多线程的支持。使用多线程,可以帮助我们编写出cpu最大利用率的高效程序,使得空闲时间降到最低,这个对于Java运行的交互式的网络互联环境是至关重要的,因为空闲时间是公共的。例如,网络的传输效率远远低于计算机的处理速度,而本地文件系统资源的读写速度也远远低于cpu的处理能力。多线程使得并且能够充分利用这些空闲时间。
Thread类说明
我们知道Java是面向对象的语言,一切皆对象,那么线程本身也是一个东西,一个事务,那么也应该由一个类来去表示,这个类就是Thread。下面是JDK的说明。
线程的实现方式
从JDK的文档上看,在Java中实现线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。
1、继承Thread类
总结:我们应该要把线程执行的代码放到run方法中,启动线程使用start方法。如果使用run方法,则这个不叫线程的运行,而是叫普通方法的调用。
2、实现Runnable接口
总结
使用继承Thread类和实现Runnable接口的关系和区别:
- Thread类本身也是实现了Runnable接口,因此也是实现了Runnable接口中的run方法。
- 当使用继承Thread类去实现线程时,我们需要重写run方法,因为Thread类中的run方法本身什么事情都不干。
- 当使用实现Runnable接口去实现线程时,我们需要重写run方法,然后使用new Thread(Runnable)这种方式来生成线程对象,这个时候线程对象中的run方法才会去执行我们自己实现的Runnable接口中的run方法。