Java线程生命周期是怎样的?如何高效使用线程?

2026-06-11 12:133阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计484个文字,预计阅读时间需要2分钟。

Java线程生命周期是怎样的?如何高效使用线程?

直接继承Thread类实现线程的使用,实现方法run(),通过线程对象.start()启动线程,才会运行线程中的run方法。

javaclass T extends Thread { @Override public void run() { System.out.println(ttttt); }}


Java线程生命周期是怎样的?如何高效使用线程?

  • 直接继承Thread类实现线程的使用,实现方法run(),使用线程对象.start()才会运行线程中的run方法。
  • class T extends Thread{
    @Override
    public void run() {
    System.out.println("ttttt");
    }
    public static void main(String[] args) {
    T t = new T();
    t.start();
    }
    }
  • 通过实现 Runnable 接口,为了实现 Runnable,一个类只需要执行一个方法调用 run(),声明如下:
  • class T implements Runnable{
    @Override
    public void run() {
    System.out.println("ttttt");
    }
    public static void main(String[] args) {
    T t = new T();
    new Thread(t).start();
    }
    }
  • 通过 Callable 和 Future 创建线程。
  • 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
  • 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
  • 使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
  • 调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
  • public class CallableThreadTest implements Callable<Integer> {
    public static void main(String[] args)
    {
    CallableThreadTest ctt = new CallableThreadTest();
    FutureTask<Integer> ft = new FutureTask<>(ctt);
    for(int i = 0;i < 100;i++)
    {
    System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i);
    if(i==20)
    {
    new Thread(ft,"有返回值的线程").start();
    }
    }
    try
    {
    System.out.println("子线程的返回值:"+ft.get());
    } catch (InterruptedException e)
    {
    e.printStackTrace();
    } catch (ExecutionException e)
    {
    e.printStackTrace();
    }

    }
    @Override
    public Integer call() throws Exception
    {
    int i = 0;
    for(;i<100;i++)
    {
    System.out.println(Thread.currentThread().getName()+" "+i);
    }
    return i;
    }
    }


    本文共计484个文字,预计阅读时间需要2分钟。

    Java线程生命周期是怎样的?如何高效使用线程?

    直接继承Thread类实现线程的使用,实现方法run(),通过线程对象.start()启动线程,才会运行线程中的run方法。

    javaclass T extends Thread { @Override public void run() { System.out.println(ttttt); }}


    Java线程生命周期是怎样的?如何高效使用线程?

  • 直接继承Thread类实现线程的使用,实现方法run(),使用线程对象.start()才会运行线程中的run方法。
  • class T extends Thread{
    @Override
    public void run() {
    System.out.println("ttttt");
    }
    public static void main(String[] args) {
    T t = new T();
    t.start();
    }
    }
  • 通过实现 Runnable 接口,为了实现 Runnable,一个类只需要执行一个方法调用 run(),声明如下:
  • class T implements Runnable{
    @Override
    public void run() {
    System.out.println("ttttt");
    }
    public static void main(String[] args) {
    T t = new T();
    new Thread(t).start();
    }
    }
  • 通过 Callable 和 Future 创建线程。
  • 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
  • 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
  • 使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
  • 调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
  • public class CallableThreadTest implements Callable<Integer> {
    public static void main(String[] args)
    {
    CallableThreadTest ctt = new CallableThreadTest();
    FutureTask<Integer> ft = new FutureTask<>(ctt);
    for(int i = 0;i < 100;i++)
    {
    System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i);
    if(i==20)
    {
    new Thread(ft,"有返回值的线程").start();
    }
    }
    try
    {
    System.out.println("子线程的返回值:"+ft.get());
    } catch (InterruptedException e)
    {
    e.printStackTrace();
    } catch (ExecutionException e)
    {
    e.printStackTrace();
    }

    }
    @Override
    public Integer call() throws Exception
    {
    int i = 0;
    for(;i<100;i++)
    {
    System.out.println(Thread.currentThread().getName()+" "+i);
    }
    return i;
    }
    }