创建线程的几种方式,及线程的生命周期?

创建线程主要有以下几种方式:

1. 继承Thread类

创建一个新的类继承自Thread类,并重写其run方法。然后创建该类的实例并调用start方法来启动线程。

class MyThread extends Thread {
    public void run() {
        // 线程执行的操作
    }
}

MyThread thread = new MyThread();
thread.start();

2. 实现Runnable接口

创建一个新的类实现Runnable接口,并实现其run方法。然后创建该类的实例,并将其作为参数传递给Thread类的构造函数,再调用Thread实例的start方法。

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的操作
    }
}

Thread thread = new Thread(new MyRunnable());
thread.start();

3. 实现Callable接口

创建一个新的类实现Callable接口,并实现其call方法。与Runnable不同的是,Callable允许任务完成后返回值。将Callable实例提交给ExecutorService,并获取Future对象,通过这个对象可以检查任务是否完成,并获取返回值。

class MyCallable implements Callable<Integer> {
    public Integer call() {
        // 线程执行的操作,并返回结果
        return 123;
    }
}

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(new MyCallable());
// 可以用future.get()获取结果

4. 使用Executor框架

Java的java.util.concurrent包提供了Executor框架,可以更简单和强大地管理线程生命周期。Executors类提供了工厂方法来创建线程池。

ExecutorService executor = Executors.newFixedThreadPool(10);
executor.execute(new MyRunnable());
executor.shutdown();

线程的生命周期

线程在其生命周期中可能会处于以下几种状态:

  1. 新建(New):新创建了一个线程对象,但还没有调用它的start()方法。
  2. 可运行(Runnable):调用start()方法后,线程处于可运行状态。此时,线程可能正在运行或者准备运行,取决于操作系统给线程提供运行的机会。
  3. 阻塞(Blocked):线程因为等待监视器锁(synchronized block)而被阻塞。
  4. 等待(Waiting):线程等待其他线程通知或中断,例如调用了Object.wait()Thread.join()LockSupport.park()
  5. 超时等待(Timed Waiting):类似于等待状态,但有时间限制,例如Thread.sleep()Object.wait(long timeout)Thread.join(long millis)
  6. 终止(Terminated):线程的run()方法执行完毕或者因为异常退出了run()方法,线程结束其生命周期。

线程在其生命周期中可能会因为调用特定的方法或者发生特定事件而从一种状态转变到另一种状态。理解线程的生命周期对于编写正确的多线程程序非常重要。

相关推荐

  1. 创建线方式线生命周期

    2024-04-07 10:32:03       34 阅读
  2. QT 创建线方法

    2024-04-07 10:32:03       52 阅读
  3. 创建线方式

    2024-04-07 10:32:03       35 阅读
  4. 线创建方式

    2024-04-07 10:32:03       34 阅读
  5. c++ 线状态

    2024-04-07 10:32:03       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 10:32:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 10:32:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 10:32:03       82 阅读
  4. Python语言-面向对象

    2024-04-07 10:32:03       91 阅读

热门阅读

  1. 数码视讯Q7盒子刷armbian遇到的坑之二

    2024-04-07 10:32:03       38 阅读
  2. 实现精简的通用环形缓冲器或环形队列

    2024-04-07 10:32:03       38 阅读
  3. 碧桂园服务:以长期主义走出稳健增长曲线

    2024-04-07 10:32:03       41 阅读
  4. [计算机网络] I/O多路复用(Epoll)

    2024-04-07 10:32:03       31 阅读
  5. Spring Boot实现Filter解决跨域问题

    2024-04-07 10:32:03       36 阅读
  6. FPGA和ARM学习那个比较好

    2024-04-07 10:32:03       33 阅读
  7. 【LeetCode热题100】【动态规划】杨辉三角

    2024-04-07 10:32:03       39 阅读
  8. python+ opencv(Mat)——笔记

    2024-04-07 10:32:03       33 阅读