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

java面试--线程总结

Java中有几种方式来创建线程执行任务,分别是什么?

  • 1、继承Thread类
public class MyThread extends Thread{public static void main(String[] args) {MyThread myThread = new MyThread();myThread.start();}@Overridepublic void run() {System.out.println("Hello");}
}

总结:重写的是run()方法,而不是start方法,但是占用继承的名额,Java中的类是单继承的。

延伸:java中的接口可以多继承

  • 2、实现Runnable接口
public class MyThread extends Thread{public static void main(String[] args) {MyThread myThread = new MyThread();myThread.start();}@Overridepublic void run() {System.out.println("Hello");}
}

总结:实现Runnable接口,实现run()方法,使用依然要用到Thread,此方式更常用

有时候,我们会直接使用匿名内部类的方式或Lambda表达式的方式(如下);

public class MyRunnable2 {public static void main(String[] args) {Thread thread = new Thread(()-> System.out.println("Hello MyRunnable2"));thread.start();}
}
  • 3、实现Callable接口
public class MyCallable implements Callable<String> {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<String> futureTask = new FutureTask<>(new MyCallable());Thread thread = new Thread(futureTask);thread.start();String result = futureTask.get();System.out.println(result);}@Overridepublic String call() {return "Hello MyCallable";}
}

总结:实现Callable接口,实现call()方法,得使用Thread+futureTask配合,这种方式支持拿到异步执行的任务结果。

  • 4、利用线程池来创建线程
public class MyExecutor implements Runnable {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(10);executorService.execute(new MyExecutor());}@Overridepublic void run() {System.out.println("Hello MyExecutor");}
}

总结:实现Callable接口或者Runnable接口都可以,有ExecutorService来创建线程。
注意:工作中,不建议使用Executors来创建线程池。

总结:
以上集中方式,底层都是基于Runnable。

为什么不建议使用Executors来创建线程池?

1、FixedThreadPool
当我们使用Executors创建FixedThreadPool时,对应的构造方法为:

public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());}

发现创建的队列为LinkedBlockingQueue,是一个无界阻塞队列,如果使用该线程池执行任务,任务过多时就会不断的添加到队列中,任务越多占用的内存就越多,最终可能耗尽内存,导致OOM(全称“Out Of Memory”,内存溢出,通俗理解就是内存不够啦)。

2、SingleThreadExecutor
当我们使用Executors创建SingleThreadExecutor时,对应的构造方法为:

public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));}

也是LinkedBlockingQueue,所以同样可能会耗尽内存。

总结:除了可能造成的内存溢出外,我们使用Executors来创建线程池也不能自定义线程的名字,不利于排查问题,所以建议直接使用ThreadPooLExecutor来定义线程池,这样可以灵活控制。

线程池有哪几种状态,每种状态分别表示什么?

1、RUNNING
表示线程池正常运行,既能接受新任务,也会正常处理队列中的任务

2、SHUTDOWN
当调用线程池的shutdown()方法时,线程池就会进入SHUTDOWN状态,表示线程池处于正在关闭状态,此状态下线程池不会接受新任务,但是会继续把队列中的任务处理完

3、STOP
当调用线程池的shutdownnow()方法时,线程池就会进入STOP状态,表示线程池处于正在停止状态,此状态下线程池既不会接受新任务了,也不会处理队列中的任务,并且正在运行的线程也会被中断。

4、TIDYING
线程次中没有线程在运行后,线程池的状态就会自动变为TIDYING,并且会调用terminated(),该方法是空方法,留给程序员进行扩展。

5、TERMINATED
terminated()方法执行之后,线程池状态就会变为TERMINATED

相关文章:

java面试--线程总结

Java中有几种方式来创建线程执行任务&#xff0c;分别是什么&#xff1f; 1、继承Thread类 public class MyThread extends Thread{public static void main(String[] args) {MyThread myThread new MyThread();myThread.start();}Overridepublic void run() {System.out.pr…...

Angular-02:环境等说明

项目名不要带数字npm版本过低安装工具时加上版本号现项目完整的工具链&#xff1a;angular ngZorro rxjs ngrx sassvscode好用插件分享&#xff1a; 名称说明Auto Close Tag自动闭合html标签Auto Import自动引包&#xff08;可自动生成文件路径提示方便文件导入&#xff0…...

pgsql 分组查询,每组取10条

需求&#xff1a; 按照表的字段分组&#xff0c;然后每组取10条结果&#xff0c;返回即可 sql 如下&#xff1a; SELECT* FROM (SELECT chk_id,feature_id,task_id, ROW_NUMBER () OVER (PARTITION BY chk_id ORDER BY chk_id) AS row_num FROM ics_check_report WHERE task…...

python,pandas ,openpyxl提取excel特定数据,合并单元格合并列,设置表格格式,设置字体颜色,

python&#xff0c;pandas &#xff0c;openpyxl提取excel特定数据&#xff0c;合并单元格合并列&#xff0c;设置表格格式&#xff0c;设置字体颜色&#xff0c; 代码 import osimport numpy import pandas as pd import openpyxl from openpyxl.styles import Font from op…...

chatgpt论文润色 降重

用chatgpt最好要给他范例。chatgpt降重原理&#xff1a; https://www.bilibili.com/video/BV1Eh411M7Ug/?spm_id_from333.337.search-card.all.click&vd_sourceebc47f36e62b223817b8e0edff181613 一. 中文论文翻译成英文 1.1 直接翻译 你是一位广义零样本学习的专家&a…...

第四章 文件管理 七、文件共享

目录 一、基于索引结点的共享方式&#xff08;硬链接) 1、知识回顾&#xff1a; 2、例子&#xff1a; 二、基于符号链的共享方式&#xff08;软链接) 1、例子 三、总结 一、基于索引结点的共享方式&#xff08;硬链接) 1、知识回顾&#xff1a; 索引结点&#xff0c;是一…...

带过期时间的localstorage封装

localstorage原本是不带过期时间的&#xff0c;xijs提供了一个带过期时间封装的store工具&#xff0c;但是用起来因为文档基本等于没有&#xff0c;所以干脆直接封装一个用&#xff0c;其中ttl是过期时间&#xff0c;以毫秒计算。 // 设置function setLocalStorageWithExpiry(…...

mac系统u盘启动盘制作教程,更新至macOS Sonoma 14

mac系统怎么制作装系统的u盘,如果您要在多台电脑上安装 macOS&#xff0c;而又不想每次都下载安装器&#xff0c;这时可引导安装器就会很有用。一起来看苹果电脑u盘启动盘制作教程吧。 Macos系统安装包合集包揽macos 10.15&#xff0c;macos 11和苹果最新系统等多个版本 1、A…...

基于单片机的智能电子鼻的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、智能电子鼻系统的设计方案1.1智能电子鼻系统的设计思路1.2智能电子鼻系统的设计流程图1.3智能电子鼻系统的硬件数…...

代码随想录图论 第三天 | 130. 被围绕的区域 417. 太平洋大西洋水流问题

代码随想录图论 第三天 | 130. 被围绕的区域 417. 太平洋大西洋水流问题 一、130. 被围绕的区域 题目链接&#xff1a;https://leetcode.cn/problems/surrounded-regions/ 思路&#xff1a;题目要求沾边的不动&#xff0c;只改没沾边的&#xff0c;那么可以先dfs遍历4条边&am…...

二、【常用的几种抠图方式一】

文章目录 选框抠图快速选择工具抠图魔棒工具抠图对象选择工具抠图套索工具抠图多边形套索工具抠图磁性套索工具抠图 选框抠图 选框工具抠图适合规则的图形&#xff0c;如下图先使用选框工具框出对象的图轮廓&#xff0c;然后再选择并遮住在里边擦出图形的边缘&#xff0c;根据…...

常见面试题-MySQL专栏(一)

为什么 mysql 删了行记录&#xff0c;反而磁盘空间没有减少&#xff1f; 答&#xff1a; 在 mysql 中&#xff0c;当使用 delete 删除数据时&#xff0c;mysql 会将删除的数据标记为已删除&#xff0c;但是并不去磁盘上真正进行删除&#xff0c;而是在需要使用这片存储空间时&…...

使用Docker部署Apache Superset并实现公网远程访问

大数据可视化BI分析工具Apache Superset实现公网远程访问 文章目录 大数据可视化BI分析工具Apache Superset实现公网远程访问前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网…...

buuctf_练[CISCN2019 华东南赛区]Web4

[CISCN2019 华东南赛区]Web4 文章目录 [CISCN2019 华东南赛区]Web4掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 ​ 根据url地址传参结构来判断php后端还是python后端&#xff1b;uuid.getnode()函数的了解&#xff0c;可以返回主机MAC地址十六进制&#xff1b;pyt…...

国际腾讯云直播推流配置教程!

云直播的服务本质是一个广播的过程&#xff0c;类似于电视台的直播节目通过有线电视网发送给千家万户。为了完成这个过程&#xff0c;云直播需要有采集和推流设备&#xff08;类似摄像头&#xff09;、云直播服务&#xff08;类似电视台的有线电视网&#xff09;和播放设备&…...

RocketMQ与Kafka差异对比:从架构到性能细节,解析两者在可靠性、扩展性和可用性等方面的优劣

淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件&#xff0c;使用Mysql作为消息存储媒介&#xff0c;可完全水平扩容&#xff0c;为了进一步降低成本&#xff0c;我们认为存储部分可以进一步优化&#xff0c;2011年初&#xff0c;Linkin开源了Kafka这个优秀的消息中间…...

【数智化人物展】同方有云联合创始人兼总经理江琦:云计算,引领数智化升级的动能...

江琦 本文由同方有云联合创始人兼总经理江琦投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 在这个飞速发展的数字时代&#xff0c;我们置身于一个前所未有的机遇与挑战并存的时刻。数字化转型不再仅仅是一…...

SpringMVC Day 03 : 处理静态资源

前言 欢迎来到第三天的 SpringMVC 学习系列&#xff01;在前两天的教程中&#xff0c;我们已经学习了如何搭建 SpringMVC 环境、创建控制器和处理请求等基础知识。今天&#xff0c;我们将继续探索 SpringMVC 的功能&#xff0c;并学习如何处理静态资源。 在现代 Web 应用程序…...

activiti 用户任务中的执行监听器

前言 略 用户任务中的执行监听器配置界面 监听器事件 用户任务中的执行监听器可以监听到的事件有&#xff1a; start&#xff1a;开始时触发。end&#xff1a;结束时触发。take&#xff1a;执行时触发。 监听器执行方式 监听器的执行方式: 类&#xff08;class&#xff…...

leetcode做题笔记200. 岛屿数量

给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网格的四条边…...

实战指南:RegRipper3.0 Windows注册表深度取证分析完整方案

实战指南&#xff1a;RegRipper3.0 Windows注册表深度取证分析完整方案 【免费下载链接】RegRipper3.0 RegRipper3.0 项目地址: https://gitcode.com/gh_mirrors/re/RegRipper3.0 RegRipper3.0 是一个专业的 Windows 注册表分析工具&#xff0c;专为数字取证和事件响应设…...

BilibiliDown:跨平台B站视频下载器的完整使用指南

BilibiliDown&#xff1a;跨平台B站视频下载器的完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bi…...

JSXBIN反编译工具:面向创意开发者的ExtendScript源代码恢复方案

JSXBIN反编译工具&#xff1a;面向创意开发者的ExtendScript源代码恢复方案 【免费下载链接】jsxer A fast and accurate JSXBIN decompiler. 项目地址: https://gitcode.com/gh_mirrors/js/jsxer 核心价值解析&#xff1a;为何选择Jsxer 在Adobe创意软件生态中&#x…...

Windows热键冲突终极排查指南:3分钟快速定位问题应用

Windows热键冲突终极排查指南&#xff1a;3分钟快速定位问题应用 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经…...

Z-Image Turbo本地化部署:数据安全与隐私保护方案

Z-Image Turbo本地化部署&#xff1a;数据安全与隐私保护方案 1. 项目概述与核心价值 Z-Image Turbo是一个基于Gradio和Diffusers构建的高性能AI绘图Web界面&#xff0c;专门为Z-Image-Turbo模型优化设计。在当今数据安全意识日益增强的环境下&#xff0c;本地化部署成为保护…...

mPLUG与LangChain集成实战:构建智能视觉问答知识库

mPLUG与LangChain集成实战&#xff1a;构建智能视觉问答知识库 1. 当图片会“说话”时&#xff0c;知识管理发生了什么变化 上周帮一家三甲医院的信息科同事调试系统&#xff0c;他们正为医学影像资料的检索头疼。放射科每天产生上千张CT和MRI片子&#xff0c;但医生想找某类…...

Hunyuan-MT-7B部署教程:像素语言传送门在阿里云ACK集群中实现高可用服务编排

Hunyuan-MT-7B部署教程&#xff1a;像素语言传送门在阿里云ACK集群中实现高可用服务编排 1. 项目概述 像素语言跨维传送门(Pixel Language Portal)是基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。与传统翻译软件不同&#xff0c;它将语言转换过程设计为16-bit像素冒险体验…...

【好靶场】越权获取信息

访问页面是一个个人信息页面我们看下雪瞳&#xff0c;可以看到的2个API接口直接抓包发现是可以进行水平越权直接进行intruder得到flag...

从PX4的FRD到Mavros的FLU:手把手教你正确配置`setpoint_raw/local`话题发布无人机目标点

从PX4的FRD到Mavros的FLU&#xff1a;无人机坐标系转换实战指南 当你在ROS环境下通过Mavros向PX4飞控发送位置指令时&#xff0c;是否遇到过无人机朝完全相反方向飞行的情况&#xff1f;这种"方向错乱"的根源往往在于坐标系理解的偏差。本文将彻底解开PX4与Mavros之间…...

DeepSeek LeetCode 1125.最小的必要团队 public int[] smallestSufficientTeam(String[] req_skills, List<List

这是 LeetCode 1125 “最小的必要团队”问题。要求从候选人中选择一个最小的团队&#xff0c;使得团队成员的技能集合覆盖所有必需的技能。问题理解 有一个技能需求列表 req_skills&#xff0c;如 ["java", "python", "cpp"]有 people 列表&…...