当前位置: 首页 > 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,释放锁的时候加了几次锁,就需要释放几次锁

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

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

相关文章:

  • 住宅代理是什么?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 分包详解与实战!
  • 图像预处理-色彩空间补充,灰度化与二值化
  • 中国证券监督管理委员会党委委员、副主席王建军接受审查调查
  • 媒体:酒店、民宿临时毁约涨价,怎么管?
  • 深观察丨从“不建议将导师挂名为第一作者”说开去
  • 江西德安回应“义门陈遗址建筑被没收”:将交由规范的义门陈相关社会组织管理
  • 游客曝九寨沟打网约车被出租车围堵,官方:前者违规,后者做法不对
  • 陈文清:推进扫黑除恶常态化走深走实,有力回应人民群众对安居乐业的新期待