线程
1. 区分程序、进程、线程
程序:为实现某种功能,使用计算机语言编写的一系列指令的集合。
进程:是运行中的程序(如运行中的原神)进程是操作系统进行资源分配的最小单位。
线程:进程可以进一步细化为线程,是进程中一个最小的执行单元,是cpu进行调度的最小单元
进程和线程的关系:
⑴ 一个进程中可以包含多个线程 (一个QQ程序可以有多个聊天窗口)
⑵ 一个线程只能隶属于一个进程 (QQ的聊天窗口只能属于QQ进程)
⑶ 每一个进程至少包含一个线程,也就是我们的主线程(像java中的main方法就是来启动主线程的)在主线程中可以创建并启动其他线程.
⑷ 一个进程的线程共享该进程的内存资源.
2. 创建线程
- 通过继承Thread来创建线程
写一个类继承java.lang.Thread
重写run( )
线程中要执行的任务都要写在run( )中,或在run( )中进行调用.
public class Demo1 extends Thread{//继承Thread类@Overridepublic void run() {//重写run方法for (int i = 1; i <= 200; i++) {System.out.println("run"+i);}}
}
public static void main(String[] args) {//创建线程Demo1 demo1 = new Demo1();//启动线程demo1.start();for (int i = 1; i <= 200; i++) {System.out.println("main"+i);}}
启动线程调用的是start() ; 不是run()
run()这不是启动线程,只是一个方法调用,没有启动线程,还是单线程模式的。
- 通过实现Runnable接口来创建线程
- 创建任务,只先创建线程要执行的任务,创建一个类,实现Runnable接口.
- 重写任务执行的Run()
- 创建线程,并为线程指定执行任务.
public class Demo2 implements Runnable {//实现Runnable接口@Overridepublic void run() {//重写run方法for (int i = 0; i < 200; i++) {System.out.println("自定义线程");}}
}
public static void main(String[] args) {//创建任务Demo2 demo2 = new Demo2();//创建线程,并指定执行任务Thread thread = new Thread(demo2);thread.start();}
3. Thread类中的方法
run() 用来定义线程要执行的任务代码.
start() 启动线程
currentThread() 获取到当前线程(.得到具体信息)
setName() 为线程设置名字
getState() 获取状态
getPriority() setPriority 获取/设置 优先级
sleep() 让当前线程休眠指定时间.
join() 等待当前线程执行完毕,其他线程再执行.
yield() 主动礼让,退出cpu重新回到等待序列.