java面试题_多线程(68题)

java面试题_多线程(68题)

ID:68465904

大小:2.59 MB

页数:24页

时间:2021-10-17

java面试题_多线程(68题)_第1页
java面试题_多线程(68题)_第2页
java面试题_多线程(68题)_第3页
java面试题_多线程(68题)_第4页
java面试题_多线程(68题)_第5页
java面试题_多线程(68题)_第6页
java面试题_多线程(68题)_第7页
java面试题_多线程(68题)_第8页
java面试题_多线程(68题)_第9页
java面试题_多线程(68题)_第10页
资源描述:

《java面试题_多线程(68题)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1.什么是线程?1、线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,可以使用多线程对进行运算提速。⽐如,如果⼀个线程完成⼀个任务要100毫秒,那么⽤⼗个线程完成改任务只需10毫秒2.什么是线程安全和线程不安全?1、线程安全线程安全:就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问,直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。Vector是用同步方法来实现线程安全的,而和它相似的ArrayList不是线程安全的。2、线程不安全线程不安全:就是不提供数据访问保

2、护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。3.什么是自旋锁?自旋锁是SMP架构中的一种low-level的同步机制。1、当线程A想要获取一把自旋锁而该锁又被其它线程锁持有时,线程A会在一个循环中自旋以检测锁是不是已经可用了。2、自选锁需要注意:由于自旋时不释放CPU,因而持有自旋锁的线程应该尽快释放自旋锁,否则等待该自旋锁的线程会一直在

3、那里自旋,这就会浪费CPU时间。持有自旋锁的线程在sleep之前应该释放自旋锁以便其它线程可以获得自旋锁。3、目前的JVM实现自旋会消耗CPU,如果长时间不调用doNotify方法,doWait方法会一直自旋,CPU会消耗太大4、自旋锁比较适用于锁使用者保持锁时间比较短的情况,这种情况自旋锁的效率比较高。5、自旋锁是一种对多处理器相当有效的机制,而在单处理器非抢占式的系统中基本上没有作用。4.什么是CAS?1、CAS(compareandswap)的缩写,中文翻译成比较并交换。2、CAS不通过JVM,直接利用java本地方JNI(JavaNativeInterfa

4、ce为JAVA本地调用),直接调用CPU的cmpxchg(是汇编指令)指令。3、利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法,实现原子操作。其它原子操作都是利用类似的特性完成的。4、整个java.util.concurrent都是建立在CAS之上的,因此对于synchronized阻塞算法,J.U.C在性能上有了很大的提升。5、CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。1、使⽤CAS在线程冲突严重时,会⼤

5、幅降低程序性能;CAS只适合于线程冲突较少的情况使⽤。2、synchronized在jdk1.6之后,已经改进优化。synchronized的底层实现主要依靠Lock-Free的队列,基本思路是⾃旋后阻塞,竞争切换后继续竞争锁,稍微牺牲了公平性,但获得了⾼吞吐量。在线程冲突较少的情况下,可以获得和CAS类似的性能;⽽线程冲突严重的情况下,性能远⾼于CAS。5.什么是乐观锁和悲观锁?1、悲观锁Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程持有共享变量的锁,都采用独占的方

6、式来访问这些变量。独占锁其实就是一种悲观锁,所以可以说synchronized是悲观锁。2、乐观锁乐观锁(OptimisticLocking)其实是一种思想。相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。memcached使⽤了cas乐观锁技术保证数据⼀致性。6.什么是AQS?1、AbstractQueuedSynchronizer简称AQS,是一个用于构建锁和同步容器的框架。事实上concurrent包内许多类都是基于AQS构建

7、,例如ReentrantLock,Semaphore,CountDownLatch,ReentrantReadWriteLock,FutureTask等。AQS解决了在实现同步容器时设计的大量细节问题。2、AQS使用一个FIFO的队列表示排队等待锁的线程,队列头节点称作“哨兵节点”或者“哑节点”,它不与任何线程关联。其他的节点与等待线程关联,每个节点维护一个等待状态waitStatus。7.什么是原子操作?在JavaConcurrencyAPI中有哪些原子类(atomicclasses)?1、原子操作是指一个不受其他操作影响的操作任务单元。原子操作是在多线程环境下

8、避免数据不

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。