网站首页 > 文章精选 正文
如果你想进大厂,线程,线程池的应用,你一定要非常熟悉。今天我们先来谈一谈线程的三种创建方式及其区别和联系。
创建线程的三种方式
第一种:通过继承Thread;第二种 :通过实现Runnable接口;第三种:通过实现Callable接口
package com;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* 创建线程的三种方式
*/
public class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//第一种 继承Thread类
MyThread1 myThread1 = new MyThread1();
myThread1.start();
//第二种 实现Runnable接口
MyTask myTask = new MyTask();
Thread myThread2 = new Thread(myTask);
myThread2.start();
//第三种 实现Callable接口
MyTaskByCallable myTaskByCallable = new MyTaskByCallable();
FutureTask<Integer> futureTask = new FutureTask<Integer>(myTaskByCallable);
Thread myThread3 = new Thread(futureTask);
myThread3.start();
Integer result = futureTask.get();
System.out.println(result);
}
}
class MyThread1 extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": 通过继承Thread类的方式创建线程。。。");
}
}
class MyTask implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": 通过实现Runnable接口的方式创建线程。。。");
}
}
class MyTaskByCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println(Thread.currentThread().getName() + ": 通过实现Callable接口的方式创建线程。。。");
return 1;
}
}
运行结果:
Thread-0: 通过继承Thread类的方式创建线程。。。
Thread-1: 通过实现Runnable接口的方式创建线程。。。
Thread-2: 通过实现Callable接口的方式创建线程。。。
1
区别
1.第一种是通过继承的方式,另外两种都是通过实现接口的方式
2.第二种和第三种的区别在于:实现Callable接口的方式可以在线程执行结束后获取结果,而通过实现Runnable接口的方式不能返回结果。
3.开发过程中,我们一般会选择通过实现接口的方式创建线程,原因有下面两点:第一,实现的方式没有类的单继承性的局限性;第二,实现的方式更适合来处理多个线程的有共享数据的情况
联系
三种方式都需要重写run()方法,将线程要执行的逻辑声明在run()方法中。
感谢大家的阅读,喜欢的话,点个赞吧,么么哒。
猜你喜欢
- 2024-12-27 Python启航:30天编程速成之旅(第23天)- 多线程从入门到精通
- 2024-12-27 10问10答:你真的了解线程池吗? 线程池的用法、原理
- 2024-12-27 线程池最佳线程数量到底要如何配置?
- 2024-12-27 线程池的创建方式,为什么阿里推荐自定义线程池?
- 2024-12-27 如何在C#中创建和使?线程池?请提供?例代码
- 2024-12-27 多线程编程 - 创建线程和结束线程
- 2024-12-27 Java面试篇基础部分-Java创建线程详解
- 2024-12-27 创建线程池有哪几种方式? 44.创建线程池有哪几种方式?
- 2024-12-27 创建线程池的4大方法,7个参数,4种拒绝策略
- 2024-12-27 进程、线程的创建和派生详细过程 线程进程定义
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)