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

多线程、JUC——面试问题自我总结

1、创建线程有几种方式

答:1、通过继承Thread类,但需要注意的是一个类继承Thread就不能继承其他的类了

       2、实现Runnable接口

       3、实现Callable接口,重写Call方法

       4、线程池

2、线程状态是怎么转换

3、实现线程的方式Callable与Runnable区别

答:1、Runnable 接口run方法没有返回值而Callable接口call方法有返回值,是个泛型

       2、Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛

       3、wait必须要调用wait对象的锁而sleep无限制,wait会释放对象锁允许其他线程获取而sleep不允许

4、sleep与wait区别

共同点:都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态

不同点:sleep是Thread的静态方法而wait是Object的成员方法,各个对象都有

5、启动一个线程是用run()还是start()

start(): 用来启动线程,通过该线程调用run方法执行run方法中所定义的逻辑代码。start方法只能被调用一次

run(): 封装了要被线程执行的代码,可以被调用多次

6、Lock和synchronized区别

1、synchronized内置的java关键字,Lock是一个java接口                     

2、synchronized无法判断获取锁的状态, Lock可以判断是否获取到了锁

3、synchronized会自动释放锁,Lock必须要手动释放锁!如果不释放锁,会产生死锁

4、synchronized 线程1(获得锁),线程2(等待); Lock锁就不一定会等待下去,lock.tryLock()可以尝试去获取锁,不会一直等待,等不到就结束。

5、synchronized 可重入锁,不可以中断的,非公平的; Lock锁,可重入的,可以判断锁,非公平(可自己设置);

6、synchronized 适合锁少量的代码同步问题,Lock 适合锁大量的同步代码

7、为什么要有读锁和写锁

答:读可以多条线程同时读取,而写锁只能限定单条线程写入

8、可重入锁、悲观锁、乐观锁、公平锁、非公平锁

公平锁:不能插队,先来后到

非公平锁:可以插队,比如有些线程执行时间很短,但是也需要等待拿到锁的线程执行完

可重入锁:也叫做递归锁,是指在一个线程中可以多次获取同一把锁,某个线程已经获得某个锁,可以再次获取锁而不会出现死锁,再次获取锁的时候会判断当前线程是否是已经加锁的线程,如果是对锁的次数+1,释放锁的时候加了几次锁,就需要释放几次锁

乐观锁:核心思想是无需加锁,每次只有一个线程修改共享变量,其他失败的线程不需要停止不断的尝试,直到成功

悲观锁:核心思想是线程只有占了锁才会去操作共享变量,其他线程只有停下来等待

http://www.dtcms.com/a/134001.html

相关文章:

  • 住宅代理是什么?2025详细指南
  • 基于前端技术的QR码API开发实战:从原理到部署
  • Handsontable 表格组件的使用
  • 自己总结的选型
  • WebSocket 技术详解
  • Flink Hive Catalog最佳实践
  • 从零实现富文本编辑器#2-基于MVC模式的编辑器架构设计
  • 大模型量化实战:GPTQ与AWQ量化方案对比与部署优化
  • 大数据学习(106)-hivesql函数
  • Maven相关名词及相关配置
  • Ubuntu卸载小皮面板
  • 记一次springboot集成海康威视SDK过程
  • 九、自动化函数02
  • sprintf函数
  • 企业应如何防范 AI 驱动的网络安全威胁?
  • WAF防火墙:构筑Web应用安全的“隐形护盾”
  • emotn ui桌面tv版官网-emotn ui桌面使用教程
  • 通信算法之265: 无人机系统中的C2链路
  • 前端 -- uni-app 的 splitChunks 分包详解与实战!
  • 图像预处理-色彩空间补充,灰度化与二值化
  • 如何在不同版本的 Elasticsearch 之间以及集群之间迁移数据
  • Android ExifInterface rotationDegrees图旋转角度,Kotlin
  • 基于 PyTorch 的 LSTM 实现降雨量预测
  • 使用RUN pip install flask和RUN pip install -r requirements.txt
  • 【rdma通信名词概念】
  • 鸿蒙开发中,@Extend、@Styles 和 @Builder 的区别
  • 前端快速入门——JavaScript函数、DOM
  • Spring MVC 模型数据绑定:addAttribute 与 put 方法详解
  • 【区块链+ 人才服务】“CERX Network”——基于 FISCO BCOS 的研学资源交换网络 | FISCO BCOS 应用案例
  • ESLint常见错误