Java八股文面试之多线程篇

文章目录

  • 线程有哪几种状态。
  • 创建多线程有几种方法?
  • 如何停止一个正在运行的线程
  • sleep()和wait() 有什么区别?
  • Thread 类中的start() 和 run() 方法有什么区别?
  • Thread类中的yield方法有什么作用?
  • 乐观锁和悲观锁的理解以及实现
  • 有三个线程T1,T2,T3如何保证顺序执行
  • 简述一下你对线程池的理解
  • 常用的线程池有哪些?分别有什么特点?
  • 说说ThreadLocal原理?
  • Thread、ThreadLocal、ThreadLocalMap关系
  • 多线程有什么用?

线程有哪几种状态。

(1)NEW
线程至今尚未启动
(2)RUNNABLE
线程正在 Java 虚拟机中执行
(3)BLOCKED
受阻塞并等待获得同步代码块的锁
(4)WAITING
无限期地等待另一个线程来执行某一特定操作
(5)TIMED_WAITING
在指定的时间内等待另一个线程来执行某一特定操作
(6)TERMINATED
线程已退出
注意:RUNNABLE 是否真的运行取决于调度器,由操作系统内核来决定,可以细分为Ready就绪和Running运行

创建多线程有几种方法?

通过继承Thread类或者实现Runnable接口、Callable接口(JDK>=1.5)都可以实现多线程,不过实现Runnable接口与实现Callable
接口的方式基本相同,只是Callable接口里定义的方法返回值,可以声明抛出异常而已。因此,将实现Runnable接口
和实现Callable接口可以归为一种方式。
(1)实现Runnable、Callable接口的方式创建线程的优缺点
①优点:线程类只是实现了Runnable接口或者Callable接口,还可以继承其他类。这种方式下,多个线程可以共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。
②缺点:编程稍微复杂一些,如果需要访问当前线程,则必须使用Thread.currentThread()方法
(2)继承Thread类的方式创建线程的优缺点
①优点:编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获取当前线程
②缺点:因为线程类已经继承了Thread类,java语言是单继承的,所以就不能再继承其他父类了。

如何停止一个正在运行的线程

(1)当线程退出后,会自动正常退出,也就是当run方法完成后线程终止
(2)使用stop方法强行终止,但是不推荐;因为stop方法是个废弃方法
(3)使用interrupt方法中断线程,但并没有真正的结束线程,所以一般用于中断正在休眠的线程

sleep()和wait() 有什么区别?

(1)对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类
中的。
(2)sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程,但是他的监控状态依然保持
着,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。
(2)当调用wai

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

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

相关文章

星期一(蓝桥杯)

题目 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一?(不要告诉我你不知道今天是星期几) 以下程序实现了这一功能,请你补全以下空白处内容: 提示: 判断1901年1月1日到20…

GPU版本torch使用教程

GPU版本torch使用教程 一、下载配置CUDA和CUDNN (1)进入cmd使用nvidia-smi.exe查看自己电脑支持的最新CUDA版本(可以下载地低版本),如图: 也可以通过NVIDIA控制面板(NVIDIA Control Panel&am…

HTML重要标签梳理学习

1、HTML文件的框架 使用VS Code编码时&#xff0c;输入!选中第一个&#xff01;就可以快速生成一个HTML文件框架。 2、标签 <hr> <!--下划线--> <br> <!--换行--> <strong>加粗</strong> &…

C++11——线程库的理解与使用

目录 前言 一、线程库的构造 1.默认构造 2.带参构造 3.拷贝构造与赋值拷贝&#xff08;不支持&#xff09; 4.移动构造 二、线程调用lambda函数 三、线程安全与锁 1.lambda中的线程与锁 2.函数指针中的线程与锁 3.trylock() 4.recursive_mutex 5.lock_gurad守卫锁…

开源工具_Aider_重塑编程体验

项目地址&#xff1a;GitHub - paul-gauthier/aider: aider is AI pair programming in your terminal编程语言&#xff1a;主要使用 PythonStar&#xff1a;8.9K功能&#xff1a;在终端中直接与 GPT-3.5/GPT-4 交互&#xff0c;编写或修改代码主要优点&#xff1a;增加了代码生…

JAVA-服务器搭建-创建web后端项目

首先打开IDEA 点击新建项目 写好名称-模板选择 Web应用程序 -语言选择 Java 构建系统选择 Maven 然后点击下一步 选择版本-选择依赖项 Web Profile 点击创建 点击当前文件-选择编辑配置 选择左上角的加号-选择Tomcat服务器-选择本地 点击配置-选择到Tomcat目录-点击确定 起个…

利用STM32 HAL库实现USART串口通信,并通过printf重定向输出“Hello World“

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 上一篇使用STM32F407的HAL库只需1行代码实现US…

记一次etcd数据恢复

使用官方示例 etcd:image: bitnami/etcd:3.4.15restart: alwaysvolumes:- ./etcd_data:/bitnami/etcdenvironment:ALLOW_NONE_AUTHENTICATION: "yes"ETCD_ADVERTISE_CLIENT_URLS: "http://etcd:2379"ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379…

史记-张良-留侯世家-8-上欲废太子;张良出谋划策;政治智慧

原文&#xff1a; 上欲废太子&#xff0c;立戚夫人子赵王如意。大臣多谏争&#xff0c;未能得坚决者也。吕后恐&#xff0c;不知所为。人或谓吕后曰&#xff1a;“留侯善画计策&#xff0c;上信用之。”吕后乃使建成侯吕泽劫留侯&#xff0c;曰&#xff1a;“君常为上谋臣&…

24届数字IC验证——SV+UVM基础知识汇总(九)

文章目录 前言57、module和program区别58、仿真调度区域59、fork-join、fork-join_none和fork-join_any的区别(经常问)60、D触发器输入高阻,输出是什么61、recovery time和removal time62、设置仿真退出时间62、$ time和$ realtime区别63、选择验证的原因(常问)64、验证工…

云仓酒庄广西发布会盛启:新老经销商欢聚南宁

原标题&#xff1a;云仓酒庄广西发布会盛启&#xff1a;新老经销商欢聚南宁&#xff0c;共襄精酿啤酒盛宴在夏日的热情与激情中&#xff0c;云仓广西发布会于今日在美丽的南宁盛大开幕。来自各地的经销商们齐聚一堂&#xff0c;共同见证了这一盛况。此次发布会不仅是一次产品的…

Python网络爬虫项目开发实战:如何解决验证码处理

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python网络爬虫项目开发实战_验证码处理_编程案例解析实例详解课程教程.pdf 一、验证码处理的简介 在Python网络爬虫项目开发实战中,验证码处理是…

SpringBoot中的扩展点

ApplicationContextInitializer的initialize方法。 时机 : 所有的配置文件都已经加载&#xff0c;spring容器还没被刷新之前 准备阶段 this.prepareContext(context, environment, listeners, applicationArguments, printedBanner); 它允许开发人员在Spring应用上下文&…

2024年汉字小达人活动还有5个月开赛:来做18道历年选择题备考吧

现在距离2024年第11届汉字小达人比赛还有五个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#x…

数电期末复习(一)数制和码制

数制和码制 1.1 概述1.2 几种常用的数制1.2.1 十进制&#xff08;Decimal&#xff09;1.2.2 二进制&#xff08;Binary&#xff09;1.2.3 二-十进制之间的转换1.2.4 十六进制和八进制1.2.5 任意进制之间的转换 1.3 二进制代码1.3.1 二-十进制码(BCD Binary Coded Decimal)1.3.2…

分享一些常用的小程序免费源码

小程序支付源码 小程序注册、登录源码 自定义图片上传组件源码 java实现小程序和网页在线聊天、即时通讯 微信小程序自定义底部tabBar实例 生成微信小程序二维码 图片上传源码 下载地址&#xff1a; 看源社区 www.see-source.com

cross-env 与 vue-cli-service 的区别

cross-env 与 vue-cli-service 的区别 一、cross-env用法多环境基本内容配置 &#xff08;非必要&#xff0c;全局变量的一种方式&#xff09; 二、vue-cli-service&#xff1a;用法 一、cross-env 它是为了解决跨平台环境变量设置的问题而开发的。 cross-env是一个用于设置跨…

2023年网络安全行业:机遇与挑战并存

2023年全球网络安全人才概况 根据ISC2的《2023年全球网络安全人才调查报告》&#xff0c;全球的网络安全专业人才数量达到了550万&#xff0c;同比增长了8.7%。然而&#xff0c;这一年也见证了网络安全人才短缺达到了历史新高&#xff0c;缺口数量接近400万。尤其是亚太地区&am…

luckysheet的使用——15.复制有合并单元格的某一行的格式到一个指定空白行

在插入空白行的时候&#xff0c;如果是在画好的表格下插入&#xff0c;api提供的插入空白行会插入没有任何格式的一行&#xff0c;无法匹配合并了单元格的表格格式&#xff0c;需要手动编写api 1.找到api.js&#xff0c;在src/global中,新增一个方法 /*** 复制有合并单元格的…

ARM_day6:实现字符串数据收发函数的封装

程序代码&#xff1a; uart4.h&#xff1a; #ifndef __UART4_H__ #define __UART4_H__ #include"stm32mp1xx_gpio.h" #include"stm32mp1xx_rcc.h" #include"stm32mp1xx_uart.h" void uart4_config(); void putchar(char dat); char getchar();…