线程的创建于启动
概述
Runnable接口用于定义线程的执行体,其中仅仅声明了一个run方法。Thread实现了Runnable接口,但是他的run方法中没有实现任何东西,需要Thread子类中实现线程执行体。
在Java中创建线程的常用方式如下:
- 继承Thread并重写run()方法
- 实现Runnable接口
- 利用Callable接口
使用Thread创建线程
步骤:
4. 定义子类继承自Thread并重写run方法
5. 创建子类实例
6. 通过start方法启动线程
示例:
使用Runnable创建线程
Runnable接口用于定义线程的执行体,其中仅仅声明了run方法。该方式可以避免由于Java单继承带来的局限性。该方式适合多个相同程序的代码去处理同一个资源的情况(例如:买票),把线程同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。
步骤:
- 定义Runnable接口的实现类,并重写该接口的run()方法
- 创建Runnable 实现类的对象
- 创建Thread 类的对象
- 通过start 方法启动线程
示例:
使用Callable创建线程
通过Thread或者Runnable 接口实现多线程时需要重写run()方法没有返回值;为解决该问题从JDK5开始提供了Callable接口;使用该接口可创建线程还可以获得返回值。
小结
- Thread 类的run()方法是一个空方法体,需要在子类中重写run()方法实现处理逻辑。
- 如果直接调用线程对象的run()方法,那么JVM不会作为一个新线程来运行,这只是一个普通的方法的调用。
- 使用Thread 的start()方法启用一个新的线程。
- 在子线程内部可通过Thread.currentThread().getName()获取线程名
- 可以通过线程的对象的getName()方法来获取线程名。
- 在同一个进程中的不同线程随机执行。即线程的执行具有随机性。