网站首页 > 精选教程 正文
如果你想进大厂,线程,线程池的应用,你一定要非常熟悉。今天我们先来谈一谈线程的三种创建方式及其区别和联系。
创建线程的三种方式
第一种:通过继承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()方法中。
感谢大家的阅读,喜欢的话,点个赞吧,么么哒。
- 上一篇: Java线程池的正确创建方式
- 下一篇: 创建线程池有哪几种方式?
猜你喜欢
- 2025-01-21 面试突击28:线程池有几种创建方式?推荐使用哪种?
- 2025-01-21 RocketMQ中的线程池是如何创建的?
- 2025-01-21 创建线程池有哪几种方式?
- 2025-01-21 Java线程池的正确创建方式
- 2025-01-21 Java面试篇基础部分-Java创建线程详解
- 2025-01-21 线程池的7种创建方式,强烈推荐你用它
- 2025-01-21 创建线程的 8 种方法
- 2025-01-21 一文搞懂!Java创建线程的几种方式
你 发表评论:
欢迎- 07-10动漫人物像|插画 壁纸 头像 签名 素材
- 07-10运动人物|插画 壁纸 头像 签名 素材
- 07-10动漫人物|插画 壁纸 头像 签名 素材
- 07-10神话人物|插画 壁纸 头像 签名 素材
- 07-10日漫人物像|插画 壁纸 头像 签名 素材
- 07-10 日漫人物|插画 壁纸 头像 签名 素材
- 07-10日漫人物风|插画 壁纸 头像 签名 素材
- 07-10日漫人物|插画 壁纸 头像 签名 素材
- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)