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

【多线程常见面试题】

谈谈 volatile关键字的用法?

volatile能够保证内存可见性,强制从主内存中读取数据,此时如果有其他线程修改被volatile修饰的变量,可以第一时间读取到最新的值

Java多线程是如何实现数据共享的?

JVM把内存分成了这几个区域:

方法区,堆区,栈区,程序计数器;

其中堆区这个内存区域是多个线程共享的;

只要把某个数据放到堆内存中,就可以让多个线程都能访问到。

Java创建线程池的接口是什么?参数LinkedBlockingQueue 的作用是什么?

创建线程有两种方式:

  • 通过Excutors工厂类创建,创建方式简单,定制能力有限
  • 通过ThreadPoolExcutor创建,创建方式比较复制,定制能力强

LinkedBlockingQueue 表示线程池的任务队列,用户通过submit/ execute向这个任务队列中添加任务,再由线程池中的工作线程来执行任务。

Java线程共有几种状态?状态之间怎么切换的?

一共有六种状态:

NEW:新创建的线程,还没有start之前,线程处在这个状态

RUNNABLE:线程调用start之后,并且正在CPU上运行/在即将准备运行 的状态

BLOCKED:线程阻塞,使用 synchronized 的时候, 如果锁被其他线程占用, 就会阻塞等待, 从而进入该状态

WAITING:调用wait/join()会进入该状态

TIMED_WAITING:调用sleep或者wait(time)/会进入该状态

TERMINAL:工作完成了,当线程执行完run方法之后.

在多线程下,如果对一个数进行叠加,该怎么做?

  • 使用synchronized/ReentrantLock加锁
  • 使用AtomInterger原子操作

Servlet是否是线程安全的?

Servlet 本身是工作在多线程环境下.

如果在 Servlet 中创建了某个成员变量, 此时如果有多个请求到达服务器, 服务器就会多线程进行操作, 是可能出现线程不安全的情况的

Thread和Runnable的区别和联系?

Thread是描述的是一个线程,Runnable描述的是一个任务

在创建线程的时候需要指定线程完成的任务,可以直接重写Thead的run方法,也可以使用Runnable描述这个任务通过Thread的构造方法传入这个任务.

多次start一个线程会怎么样?

第一次调用 start 可以成功调用.

后续再调用 start 会抛出 java.lang.IllegalThreadStateException 异常

有synchronized两个的方法,两个线程分别同时用这个方法,请问会发生什么?

synchronized 加在非静态方法上, 相当于针对当前对象(this)加锁.

如果这两个方法属于同一个实例:

线程1先获取锁,进入到这个方法,线程2获取锁失败,进入阻塞等待到线程1释放锁,线程2获取到锁以后才能执行方法;

如果两个方法不属于同一个实例:

那么这两个进行可以并发执行

进程和线程的区别?

进程是包含线程的

线程创建更加轻量,销毁也更加轻量

同一个进程之间的线程之间共享同一份资源,不同进程的线程不共享内存.

进程是系统资源分配的基本单位,进程是系统调度的基本最小单位。

http://www.lryc.cn/news/26949.html

相关文章:

  • 深度剖析指针(下)——“C”
  • 爬虫与反爬虫技术简介
  • Pag的2D渲染执行流程
  • k8s 概念说明,k8s面试题
  • Docker--(四)--搭建私有仓库(registry、harbor)
  • Invalid <url-pattern> [sso.action] in filter mapping
  • 【11】linux命令每日分享——useradd添加用户
  • Newman+Jenkins实现接口自动化测试
  • MySQL:事务+@Transactional注解
  • 数字IC手撕代码--低功耗设计 Clock Gating
  • 易基因|m6A RNA甲基化研究的数据挖掘思路:干货系列
  • 【微信小程序】-- 页面配置(十八)
  • 玩好 StarRocks,大厂 offer 接不完!|字节跳动、小红书、京东物流、唯品会、腾讯音乐要的就是你!
  • C# IoC控制反转学习笔记
  • Python解题 - CSDN周赛第33期
  • Session攻击
  • 【Linux】Shell详解
  • 汉字找不同隐私协议
  • CEC2017:斑马优化算法(Zebra Optimization Algorithm,ZOA)求解cec2017(提供MATLAB代码)
  • 【Linux要笑着学】进程创建 | 进程终止 | slab分派器
  • 数据资产管理建设思考(二)
  • 微软发布多模态版ChatGPT!取名“宇宙一代”
  • 【学习笔记】深入理解JVM之对象的实例化
  • IP协议的漏洞及防护措施
  • Linux命令·mkdir
  • 智能家居项目(八)之树莓派+摄像头进行人脸识别
  • 渗透测试之地基服务篇:无线攻防之钓鱼无线攻击(上)
  • 「ABAP」一文带你入门OPEN SQL中的SELECT查询(附超详细案例解析)
  • 【搞透C语言指针】那年我双手插兜, 不知道指针是我的对手
  • 如何从 Android 手机上的 SD 卡恢复已删除的照片