线程的生命周期与启动线程的方式

本文详细阐述了Java中线程的六种状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,并介绍了通过继承Thread类、实现Runnable接口和Callable接口创建线程的方法。

Java 语言中线程有六种状态,分别是:

  1. NEW 初始状态:当一个Thread类或其子类的对象被声明并创建时。新生的线程对象属于新建状态。

  2. RUNNABLE 可运行状态/运行状态:处于新建状态的线程执行start()方法后,进入线程队列等待CPU时间片,该状态具备了运行的状态,只是没有分配到CPU资源。当就绪的线程分配到CPU资源便进入运行状态,run()方法定义了线程的操作。

  3. BLOCKED 阻塞状态:线程在排队等待CPU资源,如轮到此线程则会自动进入运行状态。

  4. WAITING 无时限等待:线程被挂起,需要另一个线程将其唤醒才能使其重新进入可运行状态。

  5. TIMED_WAITING 有时限等待:线程被挂起,可经过一定时间后重新进入可运行状态或其他线程将其唤醒。

  6. TERMINATED 终止状态:当线程完成了任务或者由于出现异常等原因需要结束时,该线程将进入终止状态。此时,线程占用的资源会被释放掉,线程的生命周期也就结束了。

线程的创建方式

1、继承 Thread类, 重写 run方法

2、实现 Runnable接口,实现 run方法

3、实现 Callable接口,实现 call方法

1.继承Thread类

继承Thread类之后,重写run方法,把你需要执行的代码写在run方法中,测试的话,实例化一个MyThread实例对象,实行start()方法,执行线程,输出创建一个线程。

2.实现 Runnable接口

public class ImplementsRunnable implements Runnable {
 

    private final String THREAD_NAME;
 
    public ImplementsRunnable(String THREAD_NAME) {
        this.THREAD_NAME = THREAD_NAME;
    }
 
    @Override
    public void run() {

        //运行逻辑

        }
    }
 
    public static void main(String[] args) {
        ImplementsRunnable runnable1 = new ImplementsRunnable("线程A");
        ImplementsRunnable runnable2 = new ImplementsRunnable("线程B");
 
        // 实例化 Thread类对象
        Thread thread1 = new Thread(runnable1);
        Thread thread2 = new Thread(runnable2);
 
        // 启动线程
        thread1.start();
        thread2.start();
    }
 
}

3、实现 Callable接口


public class ImplementsCallable implements Callable<Integer> {
 
    private final String THREAD_NAME;
    public ImplementsCallable(String THREAD_NAME) {
        this.THREAD_NAME = THREAD_NAME;
    }
 
    @Override
    public Integer call() throws Exception {
        // 代码逻辑
        }
 
        return j;
    }
 
    public static void main(String[] args) {
        FutureTask<Integer> futureTask = new FutureTask<>(new ImplementsCallable("线程A"));
 
        // 实例化 Thread类对象
        Thread thread = new Thread(futureTask);
 
        // 启动线程
        thread.start();

        try {
            Integer integer = futureTask.get();
            System.out.println(integer);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值