当前位置: 首页 > news >正文

实现多线程方法有哪些

实现多线程方法

继承Thread类;

实现Runnable接口;

实现Callable接口通过FutureTask包装器来创建Thread线程;

使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService)

继承Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方式就是通过调用start()实例方法。start() 方法是一个native方法,它将启动一个新线程,并执行run()方法。

这时候我们再来看一下实现Runnable接口的方式,因为一个类他可能继承了其他类,由于java对类来说是单继承,所以这里只能实现接口。他的线程开启方式是将自己赋给Thread对象中,通过该对象调用run方法

而上面两种事实上实现一种无返回结果任务。当我们需要实现有返回结果的任务,就必须通过实现Callable接口,重写call方法,执行器(线程池接口ExecutorService)执行该任务后返回一个Future对象,在该对象中调用get方法就可以获得Callable任务返回的Object了。在结合线程池接口ExecutorService,就可以实现传说中的又返回结果的多线程了。

备注:

 import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;​class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {// 模拟耗时任务Thread.sleep(2000);return "任务完成!";}}​public class CallableExample {public static void main(String[] args) throws InterruptedException, ExecutionException {// 创建线程池ExecutorService executorService = Executors.newFixedThreadPool(2);​// 提交 Callable 任务Future<String> future1 = executorService.submit(new MyCallable());Future<String> future2 = executorService.submit(new MyCallable());​// 获取任务结果String result1 = future1.get();String result2 = future2.get();​System.out.println(result1);System.out.println(result2);​// 关闭线程池executorService.shutdown();}}


http://www.mrgr.cn/news/46617.html

相关文章:

  • 《HTML在网络安全中的多面应用:从防范攻击到安全审查》
  • Pycharm 使用教程
  • 基于大语言模型的组合优化
  • Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践
  • 哥大开发AI模型助力癌症和遗传病研究,近屿智能专注培养AI人才
  • Java中的Push方法:实现与应用探讨
  • 如何配置 Nginx:从入门到进阶
  • AcWing 802. 区间和(离散化算法,python)
  • 先进封装技术 Part03---重布线层(RDL)的科普
  • 腾讯云SDK项目管理
  • Java 运算符(详细介绍)
  • 来来来!聊聊Secure Debug~
  • springboot 项目使用 gitlab 的 API
  • 数据结构——排序(选择排序)
  • springboot+vue前后端分离-使用腾讯云服务器部署网站
  • 指针 (八)例题深度解析
  • 【093】基于SpringBoot+Vue实现的精品水果线上销售系统
  • Python 入门教程(6)函数 | 6.1、函数定义
  • ICE/TURN/STUN/Coturn服务器搭建
  • 多线程—— Thread 类及常见用法(详解)
  • 【测开】接口路由分类与技巧,GraphQL,WebSocket,RESTFUL方法(PUT、PATCH、OPTIONS、HEAD、TRACE)
  • 如何在IDEA使用git上传代码的时候过滤掉非.java文件
  • Chatgpt 原理解构
  • 用于图像识别的判别图正则化技术
  • std::packagedtask概念和使用方法
  • JUC高并发编程8:读写锁