java并发面试题(十二)

  1. 说说什么是公平锁?
    答:公平锁可以保证线程按照先来后到的顺序去获取锁资源,不会出现抢占现象。

  2. 说说什么是非公平锁?
    答:非公平锁无法保证线程按照先来后到的顺序去获取锁资源,很可能后来的线程先得到锁资源。

  3. Java中Semaphore是什么?
    答:Java中的Semaphore是一种新的同步类,它是一个计数信号。

  4. Semaphore有什么作用?
    答:Semaphore就是一个信号量,它的作用是限制某段代码块的并发数。Semaphore 有一个构造函数,可以传入一个int型参数n,这样就表示着最多只有n个线程可以获得某段代码块的访问权,如果线程数超出了n,就会进入等待,直到有线程执行结束,等待的线程才能进入,所以如果Semaphore 构造函数中传入参数n的值是1, 那么作用就相当于一个synchronized关键字了。

  5. volatile变量和atomic变量有什么不同?
    答:volatile变量保证可见性,atomic变量保证原子性。

  6. 实现可见性的方法有哪些?
    答:使用synchronized关键字或者Lock。

  7. CAS存在有什么问题?
    答:首先CAS容易造成ABA的问题,其次是CAS只能保证对单个变量的原子性操作,最后CAS就是一个循环判断的过程,所以如果条件一直不满足,cpu资源就会一直被占用。

  8. 什么是AQS?
    答:AQS是AbustactQueuedSynchronizer的简称,它是一个Java提供的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS。

  9. 说说AQS支持的两种同步方式?
    答:AQS的同步方式有独占式和共享式两种,AQS为使用提供了底层支撑,可以根据需要自由组装实现。

  10. 线程类的构造方法、静态块是被哪个线程调用的?
    答:线程类的构造方法、静态块是被new这个线程类所在的线程所调用的,而run方法里面的代码才是被线程自身所调用的。

发布了237 篇原创文章 · 获赞 245 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104614455
今日推荐