Java多线程实战

Java多线程实战

java多线程(超详细)
java自定义线程池总结

Java创建线程方式

  • 方法1,继承Thread类

  • 方法2,实现Runable接口

  • 方法2-2,匿名内部类形式+lambda表达式

  • 方法3,实现Callable接口,允许有返回值

  • 方法4,线程池方式
    常见线程池:
    在这里插入图片描述

public class ThreadTest {public static void main(String[] args) {// 方法一MyThread myThread = new MyThread();myThread.start();// 方法2MyRunable myRunable = new MyRunable();Thread thread = new Thread(myRunable);thread.start();// 方法2-2Thread thread1 = new Thread(() -> {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "匿名线程形式运行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}});thread1.start();// 方法3MyCallable myCallable = new MyCallable();FutureTask futureTask = new FutureTask<>(myCallable);Thread thread2 = new Thread(futureTask);thread2.start();try {Object o = futureTask.get();System.out.println(o);} catch (InterruptedException e) {throw new RuntimeException(e);} catch (ExecutionException e) {throw new RuntimeException(e);}// 方法4-线程池,常有线程池ExecutorService threadPool = Executors.newFixedThreadPool(10);threadPool.execute(myThread);threadPool.execute(myRunable);Future<?> ret = threadPool.submit(() -> {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "Callable形式运行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}return "yangshun";});try {System.out.println(ret.get());} catch (InterruptedException e) {throw new RuntimeException(e);} catch (ExecutionException e) {throw new RuntimeException(e);}threadPool.shutdown();// 方法4-2:自定义线程池ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 				//coreSize2, 				//MaxSize60, 			//60TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(3),			//指定一种队列 (有界队列),new ThreadPoolExecutor.CallerRunsPolicy()                          //自定义拒绝策略//, new DiscardOldestPolicy()               //可以使用默认拒绝策略);ThreadPoolExecutor executor = new ThreadPoolExecutor(// 核心线程数3,// 最大线程数5,// 空闲线程最大存活时间60L,// 空闲线程最大存活时间单位TimeUnit.SECONDS,// 等待队列及大小new ArrayBlockingQueue<>(100),// 创建新线程时使用的工厂Executors.defaultThreadFactory(),// 当线程池达到最大时的处理策略
//                new ThreadPoolExecutor.AbortPolicy()          // 抛出RejectedExecutionHandler异常new ThreadPoolExecutor.CallerRunsPolicy()       // 交由调用者的线程执行
//                new ThreadPoolExecutor.DiscardOldestPolicy()  // 丢掉最早未处理的任务
//                new ThreadPoolExecutor.DiscardPolicy()        // 丢掉新提交的任务);// 总共5个任务for (int i = 1; i <= 5; i++) {int taskIndex = i;executor.execute(() -> {System.out.println("线程 " + Thread.currentThread().getName() + " 正在执行任务 " + taskIndex);// 每个任务耗时1秒try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}});}executor.shutdown();System.out.println("主线程运行结束");}@Testpublic void test() {ExecutorService threadPool = Executors.newCachedThreadPool();for(int i = 0; i < 100; i++) {try {Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}threadPool.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "正在执行中。。。");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}});}threadPool.shutdown();}}
class MyCallable implements Callable{@Overridepublic Object call() throws Exception {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "Callable形式运行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}return "运行成功!yes";}
}
class MyThread extends Thread {@Overridepublic void run() {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "运行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}}
}class MyRunable implements Runnable {@Overridepublic void run() {try {Thread.sleep(5);System.out.println(Thread.currentThread().getName() + "Runable形式运行中");Thread.sleep(100);} catch (InterruptedException e) {throw new RuntimeException(e);}}
}

SpringBoot创建线程方式

【并发编程】SpringBoot创建线程池的六种方式

java并发学习–第二章 spring boot实现线程的创建

CompletableFuture使用

Java多线程(十): FutureTask CompletableFuture详解

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

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

相关文章

【深入理解Linux内核锁】三、原子操作

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、原子操作思想2、整型变量原子操作2.1 API接口2.2 API实现2.2.1 原子变量结…

log4j:WARN No appenders could be found for logger问题

本文将idea场景下的使用。 IDEA中&#xff0c;将配置文件命名为log4j.properties&#xff08;该命名才会被自动加载&#xff09;&#xff0c; 并放到某个目录下&#xff08;通常放到resources目录&#xff09;&#xff0c;并在resources上右键&#xff0c;找到Mark Directory a…

微信程序 自定义遮罩层遮不住底部tabbar解决

一、先上效果 二 方法 1、自定义底部tabbar 实现&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 官网去抄 简单写下&#xff1a;在代码根目录下添加入口文件 除了js 文件的list 需要调整 其他原封不动 代码&#xf…

【路由协议】使用按需路由协议和数据包注入的即时网络模拟传递率(PDR)、总消耗能量和节点消耗能量以及延迟研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

斯坦福「小镇」开源AI智能体;小米应用商店将要求AI应用符合资质标准

&#x1f989; AI新闻 &#x1f680; 斯坦福「小镇」开源AI智能体 摘要:斯坦福研究人员开源了一个类似《西部世界》的数字化「小镇」,里面有25个AI智能体可以生活、工作、社交。这项研究被视为AGI的重要开端,可能会改变游戏、企业应用领域。网友期待这项技术改善游戏NPC的交互…

PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的Python应用程序&#xff0c;用于将PDF文件转换为旋转90度的PDF文件。主要用于csdn网站中导出的博客pdf是横向的&#xff0c;看起来不是很方便&#xff0c;才想到用python编制一个将pdf从横向转为纵向的功能。 功能 该PDF转换工具具有以下功能&#xff1a…

信息安全:防火墙技术原理与应用.

信息安全&#xff1a;防火墙技术原理与应用. 防火墙是网络安全区域边界保护的重要技术。为了应对网络威胁&#xff0c;联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离&#xff0c;其方法是根据网络的安全信任程度和需要保护的对象&#xff0c;人为地划分若干安全…

C#工程建立后修改工程文件名与命名空间

使用之前的项目做二次开发&#xff0c;项目快结束的时候&#xff0c;需要把主项目的名称修改成我们想要的。 之前从来没有这么干过&#xff0c;记录一下。 步骤如下&#xff1a; 1&#xff1a;打开vs2010项目解决方案&#xff0c;重命名&#xff0c;如下图所示&#xff1a; …

设计模式之原型模式Prototype的C++实现

1、原型模式提出 在软件功能设计中&#xff0c;经常面临着“某些结构复杂的对象”的创建工作&#xff0c;且创建的对象想拥有其他对象在某一刻的状态&#xff0c;则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象&#xff0c;并且该对象拥有其他对象在某一刻的状态。…

Docker基础入门:镜像、容器导入导出与私有仓库搭建

Docker基础入门&#xff1a;镜像导入导出与私有仓库搭建 一、 Docker镜像、容器的导入和导出1.1、Docker镜像的导出1.2、Docker镜像的载入1.3、Docker容器的导出1.4、Docker容器的导入 二、 镜像和容器导出和导入的区别:三、commit操作_本地镜像发布到阿里云3.1、commit操作有关…

ppt中线材相交接的地方,如何绘画

ppt中线材相交接的地方&#xff1a; 在ppt中绘画线材相互交接的地方&#xff1a; 1.1绘图工具中的“弧形” 1.2小技巧 “弧形”工具点一下&#xff0c;在ppt中如下 1.3拖动活动点进行调整图形 1.4绘画圆弧 1.5调整“圆弧”的大小&#xff0c;鼠标放在“黄色点”位置&#xf…

【JVM】垃圾回收算法

目录 一、判断对象已“死” 1.1、引用计数算法 1.2、可达性分析算法 1.3、引用的概念 二、垃圾收集算法理论 2.1、分代收集理论 三、垃圾收集算法 3.1、标记--清除算法 3.2、标记--复制算法 3.3、标记--整理算法 一、判断对象已“死” 在堆里面存放着Java世界中几乎所…

【数据结构】二叉搜索树

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f40c; 个人主页&#xff1a;蜗牛牛啊 &#x1f525; 系列专栏&#xff1a;&#x1f6f9;数据结构、&#x1f6f4;C &#x1f4d5; 学习格言&#xff1a;博观而约取&…

亿赛通电子文档安全管理系统任意文件上传漏洞复现

0x01 产品简介 亿赛通电子文档安全管理系统&#xff08;简称&#xff1a;CDG&#xff09;是一款电子文档安全加密软件&#xff0c;该系统利用驱动层透明加密技术&#xff0c;通过对电子文档的加密保护&#xff0c;防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&…

excel隔行取数求和/均值

问题描述 如图有好多组数据&#xff0c;需要求每组数据对应位置的平均值 解决方法 SUM(IF(MOD(ROW(C$2:C$81), 8) MOD(ROW(C2), 8), C$2:C$81, 0))/10然后下拉右拉扩充即可&#xff0c;其中需要根据自身需要修改一些数据 SUM(IF(MOD(ROW(起始列$起始行:结束列$结束行), 每…

MATLAB图论合集(一)基本操作基础

本帖总结一些经典的图论问题&#xff0c;通过MATLAB如何计算答案。近期在复习考研&#xff0c;以此来巩固一下相关知识——虽然考研肯定不能用MATLAB代码哈哈&#xff0c;不过在实际应用中解决问题还是很不错的&#xff0c;比C易上手得多~ 图论中的图&#xff08;Graph&#xf…

FOSSASIA Summit 2023 - 开源亚洲行

作者 Ted 致歉&#xff1a;本来这篇博客早就该发出&#xff0c;但是由于前几个月频繁差旅导致精神不佳&#xff0c;再加上后续我又参加了 Linux 基金会 7/27 在瑞士日内瓦举办的 Open Source Congress&#xff0c;以及 7/29-30 台北的 COSCUP23&#xff0c;干脆三篇连发&#x…

仪表板展示 | DataEase看中国:2023年中国电影市场分析

背景介绍 随着《消失的她》、《变形金刚&#xff1a;超能勇士崛起》、《蜘蛛侠&#xff1a;纵横宇宙》、《我爱你》等国内外影片的上映&#xff0c;2023年上半年的电影市场也接近尾声。据国家电影专资办初步统计&#xff0c;上半年全国城市院线票房达262亿元&#xff0c;已经超…

一、计算机网络体系结构

Content 1. 计算机网络的组成2. 计算机网络的功能3. 计算机网络的分类4. 计算机网络的性能指标5. 计算机网络分层结构OSI模型TCP/IP模型互联网五层模型共同点&#xff1a; 6. 计算机网络提供的服务按三种方式分类面向连接服务和无连接服务可靠服务和不可靠服务有连接服务和无连…