java如何创建线程呢?

欢喜 Java经验 发布时间:2025-06-06 10:43:23 阅读数:18415 1
下文笔者讲述java代码中创建线程的方法及示例分享,如下所示

创建线程的方式

方式1:
   继承`Thread`类
      重新其中的run方法  

方式2:
   实现`Runnable`接口
     并将其作为参数传给`Thread`构造器

方式3:
   使用`Callable`和`FutureTask`
       与 `Runnable` 不同
	   `Callable` 支持返回值和抛出异常

方式4:
   使用线程池的方式
    使用`ExecutorService`线程池管理线程资源
	  提高性能和可维护性
  
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程运行中:" + Thread.currentThread().getName());
    }
}

//使用
MyThread thread = new MyThread();
thread.start(); // 启动线程
  注意:
    Java是单继承语言
	 如果类已经继承了其他类
	   就不能再继承`Thread`

//方式2:
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程运行中:" + Thread.currentThread().getName());
    }
}

//使用
Thread thread = new Thread(new MyRunnable(), "MyRunnableThread");
thread.start();

//方式3:
  使用`Callable`和`FutureTask`
    与`Runnable`不同
	  `Callable`支持返回值和抛出异常

例:
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        System.out.println("线程运行中:" + Thread.currentThread().getName());
        return "任务完成";
    }
}

//使用
Callable<String> callable = new MyCallable();
FutureTask<String> task = new FutureTask<>(callable);
Thread thread = new Thread(task);
thread.start();

try {
    String result = task.get(); // 获取返回结果
    System.out.println("线程返回值:" + result);
} catch (Exception e) {
    e.printStackTrace();
}
 

   优点:支持返回值和异常处理。
   常用于需要获取线程执行结果的场景。

//方式4:使用线程池(推荐)
   使用`ExecutorService`线程池管理线程资源
      提高性能和可维护性

例:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(2);

// 提交任务
executor.submit(() -> {
    System.out.println("线程运行中:" + Thread.currentThread().getName());
});

// 关闭线程池
executor.shutdown();

//笔者推荐大家使用这种做法
//由于线程池可以复用线程、控制并发数量,适用于高并发场景。

六种常见线程池类型(来自`Executors`工厂类)

线程池类型 描述
`newFixedThreadPool(int nThreads)` 固定大小线程池,
适合负载较重的服务器
`newCachedThreadPool()` 缓存线程池,自动回收空闲线程,
适合执行短期异步任务
`newSingleThreadExecutor()` 单线程线程池,
保证任务顺序执行
`newScheduledThreadPool(int corePoolSize)`支持定时和周期性任务调度的线程池
`newWorkStealingPool()`(JDK 8+) 使用ForkJoinPool 实现的并行线程池
`newVirtualThreadPerTaskExecutor()`(JDK 21+) 每个任务使用虚拟线程(协程),
极高并发

各种创建新线程的方式对比

方式 是否有返回值 是否可复用线程 是否推荐使用
继承 `Thread` ❌(仅学习用)
实现 `Runnable` ✅(基础用法)
使用 `Callable` + `FutureTask` ✅(需返回值时)
使用线程池(Executor) ✅/❌(视任务而定) ✅✅(推荐)
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202506/17491778358489.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者