java多线程创建方式

c209e0fa462041e38813fe5be4993b46.gif
1. 继承Thread类
这种方式是通过创建一个新的类继承自Thread类,并覆盖run()方法来创建线程。然后通过创建这个类的对象并调用其start()方法来启动线程。
public class MyThread extends Thread {
    public void run() {
        // 在这里定义线程的执行逻辑
    }

 

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 启动线程
    }
}

2. 实现Runnable接口
这种方式是通过创建一个实现了Runnable接口的类,并实现run()方法来创建线程。然后将这个类的对象作为参数传递给Thread类的构造器,并调用Thread对象的start()方法来启动线程。
public class MyRunnable implements Runnable {
    public void run() {
        // 在这里定义线程的执行逻辑
    }

    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start(); // 启动线程
    }
}

这种方式的优点在于,由于Java不支持多重继承,如果你的类需要继承其他类,那么实现Runnable接口将是唯一的选择。同时,这也使得你的线程类更加灵活,可以被设计成实现多个接口。
3. 实现Callable接口
这种方式是通过创建一个实现了Callable接口的类,实现call()方法,并使用FutureTask或者ExecutorService来创建线程。这种方式可以让你的线程带返回值。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallableExample implements Callable<String> {

    @Override
    public String call() throws Exception {
        System.out.println("Callable task is running on another thread");
        return "Callable result";
    }

    public static void main(String[] args) {
        CallableExample callableExample = new CallableExample();
        FutureTask<String> futureTask = new FutureTask<>(callableExample);

        Thread thread = new Thread(futureTask);
        thread.start();

        try {
            System.out.println(futureTask.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}

这种方式允许你在call()方法中返回一个值,并且可以通过FutureTask的get()方法获取这个值。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码开发在医疗健康领域中的应用研究

随着科技的飞速发展&#xff0c;医疗健康领域也在不断接纳新技术。低代码开发作为一种创新性的开发模式&#xff0c;正逐渐改变着医疗行业的软件开发进程。本文将探讨低代码开发在医疗健康领域中的应用及其优势&#xff0c;同时对其可能面临的挑战进行分析&#xff0c;以期为我…

Java—选择排序

选择排序是一种简单但高效的排序算法。它的基本思想是从未排序的部分中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;并将其放置在已排序部分的末尾。 实现步骤 具体实现选择排序的步骤如下&#xff1a; 遍历数组&#xff1a;从数组的第一个元素开始&#xff0…

【Python-openslide】openslide.open_slide()

作用&#xff1a; 打开图片 wsi openslide.open_slide(path)注&#xff1a; path&#xff1a; 图片所在路径&#xff0c;需要具体到图片名称(包含扩展名) 我的实验中采用的是svs格式的图像

webpack构建流程

对webpack的理解&#xff1a; webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具 可以使用webpack管理模块 因为在webpack看来&#xff0c;项目中的所有资源皆为模块&#xff0c;通过分析模块间的依赖关系&#xff0c;在其内部构建出一个依赖图&#xff0c;最终编…

SpringBoot3.2更新声明!

1 从 Spring Boot 3.1 升级 1.1 参数名称发现 Spring Boot 3.2 使用的 Spring Framework 版本不再尝试通过解析字节码来推断参数名称。如果您在依赖注入或属性绑定时遇到问题,请务必检查您是否在编译时使用了 -parameters 选项。有关更多详细信息,请参阅 "升级到 Spring…

【MATLAB】数字滤波器的设计

一、引言 在信号处理过程中&#xff0c;所处理的信号往往混有噪声&#xff0c;从接收到的信号中消除或减弱噪声是信号传输和处理中十分重要的问题。根据有用信号和噪声的不同特性&#xff0c;提取有用信号的过程称为滤波,实现滤波功能的系统称为滤波器。在以往的模拟电路中用的…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力&#xff0c;为边缘设备的Ai计算提供了可能。 集成图形处理器&#xff0c;拥有8GB/16GB LPDDR4X&#xff08;我这个是8G内存版本的&#xff09;&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&a…

大模型备案VS算法备案:差异、要求与合规快照

​下图为最新的直至第五批深度合成服务算法备案信息的公告 根据目前公开的国内大模型算法备案统计来看&#xff0c;首批境内深度合成服务算法备案清单&#xff0c;总共通过了五批。 以第二批举例&#xff0c;境内深度合成服务算法备案清单&#xff0c;总共通过110家&#xff0…

拉格朗日插值及牛顿差商方法的实现(Matlab)

一、问题描述 拉格朗日插值及牛顿差商方法的实现。 二、实验目的 掌握拉格朗日插值和牛顿差商方法的原理&#xff0c;能够编写代码实现两种方法&#xff1b;能够分析多项式插值中的误差。 三、实验内容及要求 利用拉格朗日插值及牛顿差商方法估计1980 年的人口&#xff0c;并…

牛!华为《Linux 面试笔记大全》太赞了,完整版PDF 开放下载!

在QQ和微信社群中&#xff0c;我注意到许多人都在寻找一份全面的Linux学习资料。因此&#xff0c;我在这里为大家整理和分类了相关的信息&#xff0c;可以看作是对重点内容的梳理和归纳。 这份《Linux面试笔记》主要分为三大部分&#xff1a;基础篇-进阶篇-高级篇 本书笔记针…

技术速递|宣布 Java on Azure 开发工具支持 Java on Azure Container Apps

作者&#xff1a;Jialuo Gan 排版&#xff1a;Alan Wang 在 Microsoft Build 2024 期间宣布&#xff0c;Azure Container Apps 现在可为 Java 开发人员提供丰富的操作功能。(详细内容请参见本博客&#xff09;。 我们很高兴地与大家分享&#xff0c;Azure Toolkit for Intelli…

【SQL学习进阶】从入门到高级应用(二)

文章目录 简单查询查一个字段查多个字段查所有字段查询时字段可参与数学运算查询时字段可起别名as关键字省略as关键字别名中有空格别名中有中文 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xf…

44、Flink 的 Interval Join 详解

Interval Join Interval join 组合元素的条件为&#xff1a;两个流&#xff08;暂时称为 A 和 B&#xff09;中 key 相同且 B 中元素的 timestamp 处于 A 中元素 timestamp 的一定范围内&#xff0c;即 b.timestamp ∈ [a.timestamp lowerBound; a.timestamp upperBound] 或…

Android 13 配置默认DN

需求&#xff1a; 如果存在用户配置的DNS服务器&#xff0c;则切面拦截运行商下发的DNS,替换为用户自己配置的DNS. 实现&#xff1a; 直接上代码&#xff1a; 1:TelephonyProperties 内新增属性保存用户设置的dns //QSSI.13/frameworks/base/telephony/java/com/android/in…

TCL华星揽获技术创新奖,创新能力与伙伴价值再获肯定

近日&#xff0c;以“拥抱AI共创美好”为主题的2024年联想全球供应商大会在深圳圆满举办&#xff0c;重磅分享联想战略愿景和目标。 TCL华星应邀设置品牌展区&#xff0c;携手机、IT等领域10余款前沿显示产品亮相会场&#xff0c;以先锋显示科技演绎联合共创的多元化场景。联想…

5-26作业

网络聊天室 服务器&#xff1a; 1 #include <myhead.h>2 int main(int argc, const char *argv[])3 {4 if(argc!3)5 {6 printf("请输入IP和端口号\n");7 return -1;8 }9 int sfd socket(AF_INET, SOCK_DGRAM, 0);10 if(…

MySQL数据库案例实战教程:数据类型、语法与高级查询详解

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

xss-labs之level9、level10

一、level9 1、测试分析 尝试了之前的payload&#xff0c;发现都不行&#xff0c;看源码发现多了个strpos函数&#xff0c; strpos() 是一个在 PHP 中用于查找子串首次出现位置的函数。它接受两个参数&#xff1a;要搜索的字符串&#xff08;主字符串&#xff09;和要查找的子…

AAAI2024 基于扩散模型 多类别 工业异常检测 DiAD

前言 本文分享一个基于扩散模型的多类别异常检测框架&#xff0c;用于检测工业场景的缺陷检测或异常检测。 设计SG语义引导网络&#xff0c;在重建过程中有效保持输入图像的语义信息&#xff0c;解决了LDM在多类别异常检测中的语义信息丢失问题。高效重建&#xff0c;通过在潜…

开源大模型与闭源大模型:谁将引领AI的未来?

前言 在AI领域&#xff0c;开源大模型和闭源大模型一直并存&#xff0c;各自有其独特的优势和挑战。下面&#xff0c;我们将从数据隐私、商业应用和社区参与三个方向&#xff0c;对这两种模型进行深入探讨。 一、数据隐私 开源大模型&#xff1a; 1. 透明度高&#xff1a; …