一、线程的创建、启动及生命周期
1、线程和进程的区别?
进程:内存中运行的程序,每个进程都有着独立的内存空间,一个进程中可以有多个线程
线程:进程中独立运行的子任务
2、线程的三种创建方式
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口
第一种方式编写和启动都简单,但是第二、三种方式更灵活,可以同时继承其他类和实现其他接口
public class MyThread extends Thread{//继承Thread类 public void run(){ //重写run方法实现业务逻辑 } } public class MyRunable extends Runnable {//继承Thread类
public void run(){ //重写run方法实现业务逻辑 } }
public class Main { public static void main(String[] args) { new MyThread().start();//创建并启动线程 Thread MyRunable = new Thread(new MyRunnable()); myRunnable.start(); //实现Callable接口的方式和runnable接口方式类型,通过FutureThread来创建启动线程 } }
3、线程的生命周期
流程图:
- 新建状态(New):处于新建,和Java对象一样吗,JVM仅分配了内存和进行了初始化,
- 可运行状态(Ready):也成为就绪状态,线程对象调用start()方法后,改线程进入线程队列中等待CUP的调度
- 运行状态(Running):当前线程获得CUP调度,执行Run()方法体
- 阻塞状态(Blocked):正在执行的线程因为某种原因(sleep、同步、suspend)让出CUP的资源,不被CUP所调用,停止执行方法体。
- 终止(Terminated):也称为线程死亡状态,线程执行Run()方法结束。
注意事项:
主线程结束后,子线程不受影响,也就是说子线程和主线程拥有相同的地位;已经死亡的线程不可使用start()方式进行唤醒。
3、线程的优先级
线程的执行有着随机性,线程的优先级只是设置线程被CPU调用的权重大小,并不是优先级高的线程就会比优先级低的线程要先执行。通过myThread.setPriority()的方法设置,权重最大值为10,最小为1,默认为5.(线程优先级具有继承性)
4、线程休眠和线程礼让(暂停线程)
- 线程休眠:Thread.sleep()方法可以使当前线程进入阻塞状态,待休眠时间结束进入就绪状态
注意:如果当前线程获取了某个/当前对象的同步锁,sleep()方法和yield不不会使得当前线程释放同步锁。
- 线程礼让:Thread.yield()可以使CPU暂停当前线程的执行,当前线程进入就绪状态,等待CPU的再次调度
- 线程暂停和恢复运行:myThread.suspend(),myThread.resume() 过时方
5、线程终止
线程终止是线程停止运行并走向线程死亡的状态,日常工作中常用的方法有 throw Exception、return 等方法,还有已过时的stop()方法(stop方法是暴力停止线程方法,不建议使用的)
6、常用的线程方法
- Thread.currentThread() 获取当前线程,getName(),getId()方法跟别获取线程的名称和id
- myThread.isAlive() 判定某个线程是否存活,线程启动到线程未死亡状态都属于存活
本文介绍了Java线程的基础知识,包括线程与进程的区别、线程的创建方式、生命周期、优先级、休眠与礼让、终止方法以及常用线程方法。

1610

被折叠的 条评论
为什么被折叠?



