Java核心知识点常考面试题(持续更新中)

news/2025/6/21 2:54:49

Java核心知识点常考面试题(持续更新中)

  • 线程与线程池
  • Java锁机制
    • 轻量级锁
    • 重量级锁

线程与线程池

一、线程

1、线程的状态
在这里插入图片描述
2、线程的创建方式
(1)继承 Thread 类;
(2)实现 Runnable 接口,不带返回值;
(3)实现 Callable 接口,带返回值,阻塞式获取返回值;

public static void main(String[] args) {System.out.println("===开始===");//通过结合FutureTask类实现FutureTask<String> futureTask = new FutureTask<>(() -> {String result = "";//结果处理过程......result = "Hello world!";return result;});Thread thread = new Thread(futureTask);thread.start();try {//阻塞主线程并获取返回值String result = futureTask.get();System.out.println("result = " + result);} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}System.out.println("===结束===");
}

(4)通过线程池创建线。注意:Java原生线程池(阿里官方不推荐使用Executors),原因如下:
在这里插入图片描述

二、线程池

1、线程池的核心参数
(1)corePoolSize:核心线程数。
(2)maxinumPoolSize:最大线程数。
(3)keepAliveTime:空闲线程存活时间。
(4)unit:时间单位(秒、分钟等)。
(5)workQueue:任务队列,存放任务的容器。
(6)threadFactory:线程工厂,可以使用默认的,或自定义的,通常使用默认。
(7)handler:拒绝策略,顾名思义,拒绝线程访问,JKD自带共有四种策略,如下:

1、new ThreadPoolExecutor.AbortPolicy():丢弃任务,并抛出RejectedExecutionException异常
2、new ThreadPoolExecutor.DiscardPolicy():丢弃任务,但是不抛出异常
3、new ThreadPoolExecutor.DiscardOldestPolicy():丢弃队列最前面的任务,然后重新提交被拒绝的任务
4、new ThreadPoolExecutor.CallerRunsPolicy():该任务被线程池拒绝,由调用 execute方法的线程执行该任务。

2、如何设置线程池参数

public static void main(String[] args) {//计算CPU核数int cpuCores = Runtime.getRuntime().availableProcessors();ThreadPoolExecutor threadPool = new ThreadExecutor(corePoolSize,   //核心线程数maxinumPoolSize,  //最大线程数,CPU密集型即高并发(一般为CPU核数),IO密集型(一般为:CPU核数*2)keepAliveTime,  //空闲线程的存活时间unit,  //超时时间单位workQueue,  //工作队列:new LinkedBlockingDeque<>(3),阻塞队列threadFactory,  //Executors.defaultThreadFactory(),默认创建线程的工厂,一般不动handler  //拒绝策略:ThreadPoolExecutor.AbortPolicy(),队列满了还有任务直接抛出异常);
}

3、线程池的状态及说明
线程池的状态及说明

Java锁机制

轻量级锁

一、CAS(Compare And Swap):比较并交换。也被成为:乐观锁、自旋锁。参考文章:https://blog.csdn.net/weixin_43715214/article/details/128255225

重量级锁

一、synchronized 关键字

文章来源:https://blog.csdn.net/qq_36763419/article/details/130786618
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-4633495.html

相关文章

北京云服务器安装anaconda、cuda、cudnn、torch流程

安装顺序&#xff1a;Anaconda->cuda->cudnn ->torch(根据cuda安装torch) 1读取anaconda module load anaconda/2020.11 2读取cuda cudnn module load cuda/11.1 cudnn/8.2.1_cuda11.x (查看cuda版本: nvcc -V) 3运行脚本 sbatch train.sh 脚本写法 #!/bin/bash #SB…

QT 5.14 和 VS2017脱机离线安装记录

QT 5.14是最后的离线安装版本&#xff0c;都推荐这个。看了下&#xff0c;官方建议搭配 VS2017/VS2015 VS版本对于QT&#xff0c;我一直偏好社区版&#xff0c;只要编译器就够了&#xff0c;自己加上SDK目录。因为大部分工作都是在QT内完成。VS2017的离线安装比较复杂&#xff…

6.5---每天一点点--- Java基础之static关键字(总复习+深入版)---详细+举例(小白也能看懂)

static关键字在Java中存在的主要原因是为了实现**类级别的数据和方法&#xff0c;而不是实例级别的。**它可以使得某些变量或方法在所有该类的实例之间共享&#xff0c;从而提高代码的效率和可维护性。 当我们在Java中创建一个类时&#xff0c;每个对象都有自己的一组实例变量和…

深圳市有什么靠谱的PMP机构推荐吗?

PMP项目管理专业人士资格认证是由美国项目管理协会&#xff08;Project Management Institute&#xff0c;简称PMI&#xff09;发起的。PMP作为世界级的项目管理认证证书&#xff0c;拥有着最先进的项目管理知识体系&#xff0c;它严格评估项目管理人员知识技能是否具有高品质的…

lddobjdump

ldd ldd 是类 Unix 操作系统中的命令行实用程序&#xff0c;用于显示有关二进制可执行文件或进程所依赖的共享库的信息。 名称“ldd”代表“列出动态依赖项”。 当您在可执行文件上运行 ldd 时&#xff0c;它将输出文件运行所需的所有共享库或动态链接库 (DLL) 的列表。 这对…

如何不出国一年内拿到加拿大女王大学金融硕士学位证书?

作为加拿大最好的公立大学之一&#xff0c;QueensUniversity位于安大略省的金斯顿市。最近&#xff0c;它在QS全球大学排名中跻身第209位&#xff0c;同时在加拿大的综合排名中名列第7位。这表明女王大学在学术研究和教育方面都有着出色的表现。Queens University坐落于安大略省…

N-propargyloxycarbonyl-L-lysine,1215204-46-8,是一种基于赖氨酸的非天然氨基酸 (UAA)

产品描述&#xff1a; N-ε-propargyloxycarbonyl-L-lysine (H-L-Lys(Poc)-OH) 是一种基于赖氨酸的非天然氨基酸 (UAA)。 广泛用于多种生物体中荧光探针的生物偶联。 N- ε- Propargyloxycarbonyl-L-lysine (H-L-Lys (Poc) - OH) is a non natural amino acid (UAA) based on …

公司电脑怎么监控?合法吗?

由于现在办公基本上都是使用电脑&#xff0c;且很多员工上班摸鱼时没有防范意识&#xff0c;浏览网页时盲目下载东西&#xff0c;导致公司电脑中病毒&#xff0c;过多的垃圾软件也会占据电脑内存和流量&#xff0c;影响运行速度。因此出现了很多电脑监控系统&#xff0c;监管员…

Linux Shell 实现一键部署mariadb10.11

mariadb MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。在存储引擎方面&#xff0c;使用XtraDB来代替MySQL的Inno…

Qcom_hexagon编译自动获取目录和特定文件的方法

一&#xff0c;简介 本文主要介绍&#xff0c;如何在高通hexagon ide中的hexagon.min中添加获取目录和.c文件的方法&#xff0c;供参考。 二&#xff0c;具体命令 OBJ_PATH : ./awinic_sp_module/algo_libINCLUDE_PATH : $(shell find $(OBJ_PATH ) -type d) SRC_C_FILE : …