Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 创建线程有哪几种方法

Java 创建线程有哪几种方法

作者头像
水货程序员
修改于 2018-11-15 14:59:27
修改于 2018-11-15 14:59:27
5.5K00
代码可运行
举报
文章被收录于专栏:javathingsjavathings
运行总次数:0
代码可运行
  1. 继承 Thread 类,然后调用 start 方法。
代码语言:java
AI代码解释
复制
class SampleThread extends Thread {
    //重写run方法,线程运行后,跑的就是run方法 
    public void run(){
       //System.out.println("");
    }
 
    public static void main(String[] args){
       Thread t1 = new SampleThread();
       Thread t2 = new SampleThread();
       t1.start();  //线程运行,调用的 run()方法.
       t2.start(); //线程运行,调用的 run()方法..  
    }
} 
  1. 实现 Runnable 接口的 run 方法, 然后再用 Thread 类包裹后,调用 start 方法。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class A implements Runnable{
 
    @Override
    public void run() {
        // implement run method here 
    }
 
    public static void main() {
        final A obj = new A();
 
        Thread t1 = new Thread(new A());
 
        t1.start();
    }
 
}
  1. 实现 Callable 接口的 call 方法,用 FutureTask 类包裹 Callable 对象。然后再用 Thread 类包裹 FutureTask 类,并调用 start 方法。call() 方法可以有返回值。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyCallable implements Callable {
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }
 
    public static void main(String[] args) throws Exception {
        MyCallable mc = new MyCallable(); //实例化 callable
 
        FutureTask oneTask = new FutureTask(mc); //用FutureTask包裹
        Thread oneThread = new Thread(oneTask); //用Thread包裹
        oneThread.start();
        System.out.print(oneTask.get()); //获取返回值
    }
}

Callable 方法在 Java 8 后,支持拉姆达表达式的写法,可以创建一个 FutureTask 类,语句上不是太罗嗦。

Callable 方式有以下几个优点:

  • 可以捕获线程上的异常。
  • 可以通过 get 方法得到返回值。
  • get 方法阻塞当前线程,直到调用的线程运行结束。
  • 可以取消线程的运行。

下面代码演示了使用 FutureTask 类运行线程,捕获异常的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FutureTask<Integer> task=new FutureTask<Integer>(()->{
	throw new Exception("自定义异常");
});
 
new Thread(task).start();
 
try {
	System.out.println(task.get());
} catch (Exception e) {
	System.out.println(e.getMessage());
}

Java 6 之后,还可以通过创建线程池来创建线程,使用 ExecutorService 的 execute 方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ExecutorService es = Executors.newCachedThreadPool();
Runnable r = <your runnable here>;
es.execute(r);

原创文章,转载请注明出处!https://cloud.tencent.com/developer/article/1362835

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java并发编程:Java实现多线程的几种方式
在Java中,多线程主要的实现方式有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,而后两种是带返回值的。除此之外,通过Timer启动定时任务,或者通过像Spring Task和quartz这样的第三方任务调度框架也可以开启多线程任务。
朝雨忆轻尘
2019/09/25
8.3K0
java基础第十六篇之多线程
1:线程的概念 进程(任务):一个正在运行的程序 进程的调度:CPU来决定什么时候该运行哪个进程 (时间片轮流法) 线程在一个应用程序中,同时,有多个不同的执行路径,是进程中的实际运作单位。 好处是提高程序效率。
海仔
2019/08/05
2970
【day18】多线程高级应用
在生产者-消费者模型中,我们需要协调线程之间的通信,确保生产和消费的同步进行。这就需要用到等待唤醒机制。
程序员波特
2024/12/26
840
【day18】多线程高级应用
创建线程三种方法
使用FutureTask可以用泛型指定线程的返回值类型(Runnable的run方法没有返回值)
一个风轻云淡
2023/10/15
1790
创建线程三种方法
Java面试之创建线程的三种方法及其区别
然后,调用Thread类的构造函数创建Thread实例并调用start()方法启动线程:
leon公众号精选
2022/04/27
2740
Java面试之创建线程的三种方法及其区别
Runnable 和Callable的实现与区别,应用场景
1:通过实现Runnable接口 2:通过继承Thread接口 3:通过Callable和Future创建线程
全栈程序员站长
2022/07/25
1.5K0
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
终有救赎
2023/10/16
1930
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
创建线程的8种方法
优点: 解耦任务逻辑和线程对象,灵活性更高。 缺点: 需要额外创建Thread对象。
用户11397231
2025/01/02
1580
创建线程的8种方法
创建线程的 8 种方法
无论是为了提高程序运行效率,还是为了处理复杂的并发任务,我们都需要在代码中使用线程。
苏三说技术
2024/12/30
4390
创建线程的 8 种方法
Java中实现多线程的四种方式
Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。
Kevin_Zhang
2019/02/20
5510
「有点收获」三种基本方法创建线程
挺基础的知识,一开始不是很愿意写,毕竟这种简单的知识大家不一定愿意看,而且容易写的大众化,不过还好梳理一遍下来还算是有点收获,比如我看了 Thread 类重写的 run 方法,才明白为什么可以把任务(Runnable)和线程本身(Thread)分开来。
飞天小牛肉
2021/05/14
3630
「有点收获」三种基本方法创建线程
创建线程的四种方式
Executors提供了一系列工厂方法用于创先线程池,返回的线程池都实现了ExecutorService接口。
Java架构师必看
2021/07/14
2680
java基础thread——java5之后的多线程(浅尝辄止)
虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。
100000860378
2018/09/13
3890
java基础thread——java5之后的多线程(浅尝辄止)
大数据必学Java基础(七十六):创建线程的三种方式
实际开发中,方式1 继承Thread类 还是 方式2 实现Runnable接口这种方式多呢?
Lansonli
2022/11/06
3060
大数据必学Java基础(七十六):创建线程的三种方式
新手学JAVA(十)-多线程----线程的创建和启动
通过继承Thread类或实现Runnable、Callable接口都可以实现多线程。不过实现Runnable和实现Callable的方式基本相同,只不过Callable有返回值,并可以抛出异常。因此把Runnable、Callable归为一类。这种实现方式和继承Thread方式的差别如下:
令仔很忙
2018/09/14
4370
java创建线程的几种方式
    首先通过 RunnableThread 类实现 Runnable 接口,然后重写 run() 方法,之后只需要把这个实现了 run() 方法的实例传到 Thread 类中就可以实现多线程。
samRsa
2025/02/24
1460
java中创建线程的三种方法
1】d定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体。
zhangjiqun
2024/12/16
1790
Future和Callable学习
我们知道使用多线程时,最初的Thread到线程池,此时对于线程的使用,提供了其使用的复用率。而实现多线程的三种方式:继承Thread;实现Runnable接口,重写run方法;实现Callable接口,同时重写call方法,同时通过Future获取执行的返回值。也就是说callable执行任务,而Future拿到执行的结果。Future具有阻塞性在于其get()方法具有阻塞性,而isDone()是不具有阻塞性的。
路行的亚洲
2020/07/16
5030
第二十五天 多线程-常用方法&线程池【悟空教程】
System.out.println(getName() + " ==== " + i );
Java帮帮
2018/07/26
3950
第二十五天 多线程-常用方法&线程池【悟空教程】
Java 中创建线程的 8 种方法,你知道那几种?
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2025/01/27
2820
Java 中创建线程的 8 种方法,你知道那几种?
相关推荐
Java并发编程:Java实现多线程的几种方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验