Java并发编程(一):线程的5种状态、3种创建方式

本文详细介绍了Java中的线程五种状态(新建、就绪、运行、阻塞和死亡)、以及通过继承Thread类、实现Runnable接口和Callable接口的三种创建线程的方式及其区别。
摘要由CSDN通过智能技术生成

Java并发编程(一):线程的5种状态、3种创建方式

程序员的前半生

多线程这个概念大家已经相当熟悉了,概念性的东西就不多说了。我们要讲解的内容如下:

线程的5种状态、创建线程的3种方式及其区别。

一.线程的5种状态

1.新建状态

使用new关键字建立一个线程对象后,程序start()这个线程之前都是新建状态。

2.就绪状态

线程对象调用start()之后线程进入就绪状态,在就绪队列中等待JVM的线程调度器调度。

3.运行状态

就绪状态的线程获取到CPU资源就可以执行run(),线程变为运行状态。

4.阻塞状态

失去占用资源会使线程变为阻塞状态,根据失去资源的方式或原因阻塞状态分为3种。

等待阻塞:线程执行wait()方法。
同步阻塞:线程获取synchronized同步锁失败。
其它阻塞:sleep()、join()、IO请求,都会使线程进入阻塞状态。

5.死亡状态

任务执行完成或者终止条件发生,线程进入终止状态。

二.创建线程的3种方式

1.继承Thread类

1.1.实现步骤:

1.创建继承Thread的子类,并重写run()方法。
2.创建子类的实例对象。
3.子类实例对象调用start()方法启动线程。

1.2.代码示例:

2.实现Runnable接口

2.1.实现步骤:

1.创建Runnable的实现类,并实现run()方法。
2.创建实现类的实例对象,并用这个实例对象作为Thread的target创建Thread线程对象。
3.Thread线程对象调用start()方法启动线程。

2.2.代码示例:

3.实现Callable接口

3.1.实现步骤:

1.创建Callable的实现类,并实现call()方法,然后创建这个实现类的实例。这里我们不写实现类,而是采用更方便的Lambda表达式。
2.使用FutureTask类包装Callable对象。
3.使用FutureTask对象作为Thread对象的target创建Thread线程对象并调用start()方法启动线程。
4.调用FutureTask对象的get()方法获得子线程执行结束后的返回结果。

3.2.代码示例:

三.3种创建方式的区别

1.实现Runnable、Callable接口的区别

  • 基本相同,区别是Callable的call()方法有返回值。

2.实现接口和继承Thread的区别

  • 继承Thread类就不能再继承其它类,而实现接口还可以继承其它类。
  • 实现接口的方式多个线程可以共享同一target。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值