关键字
volatile
可见性
不保证原子性
禁止指令重排
syn
synchoronized与lock
syn是关键字,lock是一个接口
syn为非公平锁,lock默认非公平锁(false),可以改为公平锁(true)
lock需要手动拿锁释放所,syn不用
两个都是可重入锁(递归锁)
syn配wait,用notify唤醒;lock配await,signal唤醒
lock,lockInterruptibly()实现,这是一个可以对中断进行响应的锁申请动作,锁中断可以避免死锁
synchronized 可以给类、方法、代码块加锁;而 lock 只能给代码块加锁
通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。
说一下 synchronized 底层实现原理?
锁升级的原理是什么?
当一个线程进入一个对象的 synchronized 方法 A 之后,其它线程是否可进入此对象的 synchronized 方法 B?
Executor <br>
ExecutorService <br>
ThreadPoolExecutor <br>
ThreadFactory
产出线程的工厂,一般默认就行
RejectedExecutionHandler <br>
拒绝策略
优点
池化技术
种类
newSingleThreadExecutor
newFixedThreadPool
newCachedThreadPool
newScheduledThreadPool
线程池都有哪些状态?
线程池中 submit() 和 execute() 方法有什么区别?
常用的并发工具类
CountDownLatch <br>
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
CyclicBarrier <br>
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
Semaphore <br>
一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动
多线程常用并发集合
ConcurrentHashMap<K,V> <br>
CopyOnWriteArrayList<E> <br>
使用场景
缺点
设计思想
CopyOnWriteArraySet<E> <br>
与同步集合区别
线程中常用方法区别?
线程的 sleep()方法和 yield()方法有什么区别?
sleep() 和 wait() 有什么区别?
你是如何调用 wait() 方法的?使用 if 块还是循环?为什么?
为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?
为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?
Thread 类中的 yield 方法有什么作用?
为什么 Thread 类的 sleep()和 yield ()方法是静态的?
线程的 sleep()方法和 yield()方法有什么区别?
Java 中 interrupted 和 isInterrupted 方法的区别?
如何停止一个正在运行的线程?
Java 中你怎样唤醒一个阻塞的线程?
notify() 和 notifyAll() 有什么区别?
Java 如何实现多线程之间的通讯和协作?
同步方法和同步块,哪个是更好的选择?
其余问题汇总
并发编程三要素是什么?
线程出现的安全问题?怎么解决
并发并行区别
什么是多线程?优缺点
什么是进程,线程?区别
什么是上下文切换?
守护线程和用户线程有什么区别呢?
如何在 Windows 和 Linux 上查找哪个线程cpu利用率最高?
线程周期及几种状态
什么是线程同步和线程互斥,有哪几种实现方式?
在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
什么叫线程安全?servlet 是线程安全吗?
在 Java 程序中怎么保证多线程的运行安全?
你对线程优先级的理解是什么?
线程类的构造方法、静态块是被哪个线程调用的
Java 线程数过多会造成什么异常?<br>
synchronized、volatile、CAS 比较
乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
多线程锁的升级原理是什么?
SynchronizedMap 和 ConcurrentHashMap 有什么区别?
并发容器之ThreadLocal详解<br><br>ThreadLocal 是什么?有哪些使用场景?
ThreadLocal内存泄漏分析与解决方案<br><br>ThreadLocal造成内存泄漏的原因?
Executors和ThreaPoolExecutor创建线程池的区别
在 Java 中 Executor 和 Executors 的区别?