tamako tamako
首页
  • Mysql
  • Redis
  • JVM
  • 个人开源项目 (opens new window)
  • 开源官网 (opens new window)
  • B站主页 (opens new window)
  • 摄影
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

tamako | 玉子

胜人者有力,自胜者强
首页
  • Mysql
  • Redis
  • JVM
  • 个人开源项目 (opens new window)
  • 开源官网 (opens new window)
  • B站主页 (opens new window)
  • 摄影
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 线程池
  • 线程创建方式
    • 继承Thread类
    • 实现 Runnable 接口
    • 实现Callable接口
    • 线程池
  • ThreadLocal
  • 多线程
pruedream
2023-12-11
目录

线程创建方式

# 线程创建方式

Java中创建线程主要有三种方式,分别为继承Thread类、实现Runnable接口、实现Callable接口。

# 继承Thread类

继承Thread类,重写run()方法,调用start()方法启动线程

public class ThreadTest {

 
public static class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("hello");
    }
}

public static void main(String[] args) {
    MyThread thread = new MyThread();
    thread.start();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 实现 Runnable 接口

实现 Runnable 接口,重写run()方法

public class RunnableTask implements Runnable {
    public void run() {
        System.out.println("Runnable!");
    }

    public static void main(String[] args) {
        RunnableTask task = new RunnableTask();
        new Thread(task).start();
    }
}

1
2
3
4
5
6
7
8
9
10
11

实际上Thread中的run方法不重写的话,逻辑就是调用Runnable 的run方法。

# 实现Callable接口

实现Callable接口,重写call()方法,这种方式可以通过FutureTask获取任务执行的返回值

public class CallerTask implements Callable<String> {
    public String call() throws Exception {
        return "Hello,i am running!";
    }

    public static void main(String[] args) {
        //创建异步任务
        FutureTask<String> task=new FutureTask<String>(new CallerTask());
        //启动线程
        new Thread(task).start();
        try {
            //等待执行完成,并获取返回结果
            String result=task.get();
            System.out.println(result);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 线程池

public static void main(String[] args) {

    Runnable task1 = new Task1();
    Runnable task2 = new Task2();
    new Thread().start();
    ExecutorService executorService = Executors.newFixedThreadPool(2);
    executorService.execute(task1);
    executorService.execute(task2);
   
}
1
2
3
4
5
6
7
8
9
10

Java创建线程有很多种方式啊,像实现Runnable、Callable接口、继承Thread类、创建线程池等等,不过这些方式并没有真正创建出线程,严格来说,Java就只有一种方式可以创建线程,那就是通过new Thread().start()创建。 而所谓的Runnable、Callable……对象,这仅仅只是线程体,也就是提供给线程执行的任务,并不属于真正的Java线程,它们的执行,最终还是需要依赖于new Thread()……

#多线程
上次更新: 2024/08/09, 16:07:34
线程池
ThreadLocal

← 线程池 ThreadLocal→

最近更新
01
骄惰怯
08-10
02
谦虚谦虚谦虚
08-09
03
长期主义
07-17
更多文章>
Theme by Vdoing | Copyright © 2019-2024 tamako | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式