java创建多线程方式

news2024/12/22 2:22:23

文章目录

    • 概要
    • 继承 Thread 类
    • 实现 Runnable 接口
    • 实现 Callable 接口
    • 线程池

概要

继承 Thread 类

public class Test extends Thread {
    @Override
    public void run() {
        System.out.println("current thread is:" + Thread.currentThread().getName());
    }

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

实现 Runnable 接口

在这里插入图片描述
方式1:

public class Test implements Runnable {
    @Override
    public void run() {
        System.out.println("current thread is:" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        Test test = new Test();
        Thread thread = new Thread(test);
        thread.start();
    }
}

方式2:
参数 new Runnable() { … } 是一个匿名内部类实现 Runnable 接口。【传参,new一个接口,需要实现该接口的方法】

public class Test{
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("current thread is:"+Thread.currentThread().getName());
            }
        });
        thread.start();
    }
}

方式3:
只有一个抽象方法的接口被称为函数式接口。函数式接口可以用于 Lambda 表达式
在这里插入图片描述

public class Test {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            System.out.println("current thread is:" + Thread.currentThread().getName());
        });
        thread.start();
    }
}

实现 Callable 接口

public class Test implements Callable<String> { // 和Runnable这个有返回值
    @Override
    public String call() throws Exception {
        System.out.println("current thread is:" + Thread.currentThread().getName());
        return "yes";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Test test = new Test();
        // FutureTask用来包装Callable的实例
        FutureTask<String> futureTask = new FutureTask<>(test);
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get()); // 返回值
    }
}

线程池

在工作中,使用线程池是更为推荐的方法,因为它能更好地管理和复用线程资源,避免频繁创建和销毁线程带来的开销。

@Slf4j
@Configuration
public class testConfig {

    @Bean
    public Executor testExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 1.核心线程池大小
        executor.setCorePoolSize(5);
        // 2.最大线程池大小
        executor.setMaxPoolSize(10);
        // 3.队列大小
        executor.setQueueCapacity(99999);
        // 4.线程名称前缀
        executor.setThreadNamePrefix("test-executor-");
        // 5.拒绝策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        executor.initialize();
        return executor;
    }
}

拒绝策略 :

  • 当任务队列已满且线程数已达到最大值时,新任务会被拒绝。常用的拒绝策略有:
    • AbortPolicy:直接抛出 RejectedExecutionException
    • CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务。
    • DiscardPolicy:直接丢弃任务,不抛出异常。
    • DiscardOldestPolicy:丢弃队列中最老的任务,然后重新尝试提交新任务。

总结:可能面试的时候经常考线程相关的笔试,可以重视一下,比如volatile synchronized wait/notify


❤觉得有用的可以留个关注~❤

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

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

相关文章

Aigtek超声功率放大器在建筑结构检测中的应用

超声功率放大器是一种可以可放大交、直流信号的功率放大器。它可以用来驱动高压型负载。通过与主流的信号发生器配套使用&#xff0c;实现信号的放大&#xff0c;因此超声功率放大器在建筑结构检测中有着良好应用&#xff0c;今天Aigtek安泰电子就为大家介绍一下。 什么是超声波…

拓普壹老阳:人力rpo项目如何做才会成功?

为了成功执行老阳推荐的人力RPO项目(招聘流程外包)&#xff0c;关键在于几个核心要素的有效整合和执行。RPO项目不仅仅是简单地外包招聘流程&#xff0c;更是通过优化流程、提升效率和质量&#xff0c;帮助企业实现人才招聘的战略目标。 首先&#xff0c;项目的成功与需求分析和…

PID控制算法

关于PID算法最全的文章&#xff01;从浅入深快速掌握 GitHub - br3ttb/Arduino-PID-Library

STM32F28335:按键实验

一个简单的按键实验&#xff1a; 每一个按键的功能是不一样的 其中不知道为什么key3出现了问题&#xff0c;可是查不出原因&#xff0c;就先放在这里了 按键采用行列扫描的方式判断 大家可以自己看资料 看管脚和资料是程序猿的基本功 代码&#xff1a; key的驱动 keys.c…

【Java】Java泛型、集合、UML统一建模语言、final关键字

昨天在昆仑巢&#xff0c;下午练习Spring Boot的过滤器Filter。 昨天傍晚开始阅读《疯狂Java讲义(第2版)》&#xff0c;熟悉了UML建模语言、Final修饰符、List集合和泛型。 1.UML建模语言: 13种图&#xff0c;常用的包括用例图、类图、组件图、部署图、顺序图、活动图和状态机…

【ai】 时间序列分析的python例子

时间序列分析 :分析和理解随时间变化的数据序列 在gcc的趋势滤波后,需要对排队延迟梯度进行检测及调整,参考的是一个阈值, 调整阈值时就使用了时间序列分析技术: 时间序列分析是统计学和数据分析中的一种技术,用于分析和理解随时间变化的数据序列。时间序列数据具有时间上…

活动易企秀H5场景秀源码系统 带完整的安装代码包以及搭建教程

在数字化营销飞速发展的今天&#xff0c;H5页面以其独特的互动性、高度的传播性和良好的兼容性成为众多企业及个人宣传推广的首选。而“活动易企秀H5场景秀”作为一款广受欢迎的在线H5创作工具&#xff0c;凭借其丰富的模板、简易的操作流程&#xff0c;让非技术背景的用户也能…

MySQL笔记(八):事务

一、事务 事务用于保证数据的一致性&#xff0c;它由一组相关的dml组成&#xff0c;该组的dml语句要么全部成功&#xff0c;要么全部失败&#xff1a;转账。 事务和锁&#xff1a;当执行事务操作时&#xff08;dml语句&#xff09;,mysql会在表上加锁&#xff0c;防止其他用户…

【Mysql】第十四章 使用C语言链接(环境配置+连接库+sql函数)

文章目录 1.下载库2.上传库3.编译库4.连接库创建对象-mysql_init连接数据库-mysql_real_connect关闭数据库连接-mysql_close 5.sql函数设置编码格式-mysql_set_character_set发送请求-mysql_query获取查询结果-mysql_store_result获取查询结果的行数-mysql_num_rows获取查询结果…

案例开发-日程管理2第一期(超详细教程、配备图文和源代码注释,没学过也能看懂)

文章目录 一、 项目前期准备1.数据库准备2.导入依赖3.pojo包处理4.dao包处理5.service包处理6.controller包处理7.加密工具类的使用8.页面文件的导入 总结 一、 项目前期准备 1.数据库准备 创建schedule_system数据库并执行如下语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHE…

国产AI大模型:从萌芽到繁盛,未来可期

I一、AI****大模型的起源 自1950年图灵提出著名的“图灵测试”以来&#xff0c;人工智能领域经历了从学术探索到实际应用的转变。1956年达特茅斯会议上“人工智能”一词的首次提出&#xff0c;标志着AI正式成为学术研究的焦点。进入21世纪&#xff0c;随着计算能力的显著提升和…

【Pyspark-驯化】一文搞懂Pyspark中的withColumnRenamed函数的使用技巧

【Pyspark-驯化】一文搞懂Pyspark中的withColumnRenamed函数的使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取…

常见的中间件漏洞:Tomcat

Tomcat简介 tomcat是一个开源而且免费的isp服务器&#xff0c;默认端口:8080&#xff0c;属于轻量级应用服务器。它可以实现JavaWeb程序的装载&#xff0c;是配置JSP(Java Server Page)和JAVA系统必备的一款环境。在历史上也披露出来了很多的漏洞&#xff0c;这里我们讲几个经典…

.NET_WPF_使用Livecharts数据绑定图表

相关概念 LiveCharts 是一个开源的图表库&#xff0c;适用于多种 .NET 平台&#xff0c;包括 WPF、UWP、WinForms 等。LiveCharts 通过数据绑定与 MVVM 模式兼容&#xff0c;使得视图模型可以直接控制图表的显示&#xff0c;无需直接操作 UI 元素。这使得代码更加模块化&#x…

JavaEE: Thread类以及线程状态

文章目录 Thread类等待一个线程 - join()获取当前线程的引用sleep 线程状态 Thread类 等待一个线程 - join() 操作系统,针对多个线程的执行,是一个"随机调度,抢占式执行“的过程. 线程等待就是在确定两个线程的"结束顺序”. 我们无法确定两个线程调度执行的顺序,但…

物理动力系统的强化学习:一种替代方法

物理动力系统的强化学习&#xff1a;一种替代方法 一、物理和非线性动力学 控制理论通过经典的、鲁棒的和最优的方法&#xff0c;使现代文明成为可能。炼油、电信、现代制造业等都依赖于它们。控制理论建立在物理方程提供的洞察力之上&#xff0c;例如从牛顿定律和麦克斯韦方程…

干货分享 | TSMaster 测试报告生成器操作指南

用户在基于 TSMaster 软件开发测试用例时&#xff0c;或需要使用 TSMaster 生成 HTML 报告时&#xff0c;需要使用 TSMaster 测试报告生成器。 1、Test_Report 说明 Test_Report 是目前 TSMaster 为客户提供的一套测试报告模板&#xff0c;里面集成了测试报告的打印输出、图片…

android13去掉安全模式 删除安全模式

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题排查 3.修改方法 3.1方法1 3.2方法2 4.测试 5.彩蛋 1.前言 Android设备上的安全模式是一种诊断模式,当设备无法正常启动时,它会启动到这个模式。在这个模式下,只有系统自带的程序和服务会被运行,所有的第三方…

谷粒商城实战笔记-139-商城业务-nginx-搭建域名访问环境一(反向代理配置)

文章目录 一&#xff0c;管理员身份修改hosts文件二&#xff0c;配置Nginx反向代理product服务1&#xff0c;Nginx配置文件简介2&#xff0c;配置Nginx将gulimall.com的请求转发到product服务 本节的主要内容是讲述如何实现通过域名 gulimall.com访问谷粒商城系统。 主要实现思…

IDEA右键新建时没有Java Class选项

项目场景&#xff1a; IDEA右键新建时没有Java Class选项 问题描述 IDEA右键新建时没有Java Class选项 原因分析&#xff1a; 提示&#xff1a;这里填写问题的分析&#xff1a; 例如&#xff1a;Handler 发送消息有两种方式&#xff0c;分别是 Handler.obtainMessage()和 Ha…