【多线程常见面试题】
创始人
2024-05-28 11:41:36
0

谈谈 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获取到锁以后才能执行方法;

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

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

进程和线程的区别?

进程是包含线程的

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

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

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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...