线程相关概念
并发:两个或多个事件在同一时间段发生,任务交替执行
并行:两个或多个事件在同一时刻发生,任务同时执行
进程:指内存中运行的应用程序,进程是程序的一次执行过程
线程:进程中的一个执行单元,负责进程中程序的执行,一个进程中至少有一个线程,也可为多线程
创建多线程程序
-
方式一:创建Thread类的子类
Thread
类概述:java.lang.thread
,线程类,虚拟机允许并发运行多个线程。步骤:
- 创建一个Thread类的子类
- 子类中重写类中run方法,设置线程任务
- 在主线程中创建子类对象
- 调用Thread类的start方法开启执行新线程,虚拟机调用执行run方法
注意:
- 两个线程并发运行,多次启动一个线程是非法的,结束后也不能再重新启动。
- Java程序属于抢占式调度,根据优先级执行线程,同一优先级随机执行。
- 多个线程在不同的栈空间中,互不影响。
常用方法:
String getName()
返回所在线程的名称。 如Thread-0
static Thread currentThread()
返回对当前正在执行的线程对象的引用。 可与getName
链式获取当前线程名称。void setName(String name)
设置线程名称。也可在子类中重载构造方法Thread(String name)
直接取名。static void sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。可写入for循环。
-
方式二:实现
Runnable
接口(推荐)Runnable
接口概述:java.lang.Runnable
,只含有run方法。步骤:
- 创建一个
Runnable
接口的实现类,并重写run方法,设置线程任务 - 在主线程中创建接口的实现类对象
- 创建Thread类对象,构造方法中传入接口的实现类对象
- 通过Thread类对象调用start方法,开启新线程执行run方法
优点:
- 避免了单继承的局限性(Thread类的子类只能由一个亲生父亲)
- 降低了程序的耦合性(解耦),将设置线程任务和开启新线程进行了分离,可往构造方法中传入不同实现类对象而开启不同线程。
- 创建一个