Java基础——线程(1)
1、基本概念——什么是线程?
提及到线程就不得不说比线程 “大”的两个概念——进程、程序。
程序:完成特定任务、用某种语言编写的一组指令的集合,即我们写的能完成某种功能静态代码;
进程:进程就是我们写的程序执行的过程,是一个动态的过程。它有生命周期——产生、执行、销毁;
下面才是线程登场的时候,将进程执行过程进行细化,每一个执行不同的任务的单元,便是线程。书本的定义:线程是操作系统能够进行运算调度的最小单位。
2、Java如何创建线程?
Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现。
Thread类的特性:
- 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体;
- Thread对象通过start()方法来启动这个线程,而非直接调用run();
Java在1.5之前提供的两种创建线程的方法:
1、继承Thread类的方式;
- 定义子类继继承Thread类;
- 子类重写Thread()类中的Run方法,方法中为业务程序;
- 创建Thread子类的对象,即创建了线程对象;
- 调用线程对象start方法:启动线程,run方法被调用。
/** * @author iwang * @date 2019/10/27-14:36 * @desc 定义子类继继承Thread类(第一步) */ public class FirstThread extends Thread { //重写Thread()类中的Run方法(第二步) @Override public void run() { System.out.println("线程run()方法被调用执行!"); } public static void main(String[] args) { //创建Thread子类的对象,即创建了线程对象(第三步) FirstThread firstThread = new FirstThread(); //调用线程对象start方法:启动线程,run方法被调用。(第四步) firstThread.start(); } }
- 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。
- run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU调度决定。
- 想要启动多线程,必须调用start方法。
- 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将抛出以上的异常“IllegalThreadStateException”。
2、实现Runnable接口的方式;
- 定义子类,实现Runnable接口。
- 子类中重写Runnable接口中的run方法。
- 通过Thread类含参构造器创建线程对象。
- 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。
- 调用Thread类的start方法:开启线程,Runnable子类接口的run方法被调用。
/** * @author iwang * @date 2019/10/27-14:53 * @Desc 定义子类,实现Runnable接口(第一步) */ public class SecondThread implements Runnable { //子类中重写Runnable接口中的run方法(第二步) @Override public void run() { System.out.println("线程run()方法被调用执行!"); } public static void main(String[] args) { SecondThread secondThread = new SecondThread(); //子类中重写Runnable接口中的run方法(第二步),将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中(第三步) Thread thread = new Thread(secondThread); //调用Thread类的start方法:开启线程,Runnable子类接口的run方法被调用(第五步) thread.start(); } }
两种方式区别与联系:
区别
- 继承Thread:线程代码存放Thread子类run方法中。
- 实现Runnable:线程代码存在接口的子类的run方法。
实现方式的好处
- 避免了单继承的局限性
- 多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。

浙公网安备 33010602011771号