juc面试题
一:线程同步的方式有哪些?
线程同步指的就是让多个线程之间按照顺序访问同一个共享资源
- synchronized:Java中最基本的线程同步机制,可以修饰代码块或方法,保证同一时间只有一个线程访问该代码块或方法,其他线程需要等待锁的释放。
- ReentrantLock:可以保证同一时间只有一个线程访问共享资源,但是更灵活,支持公平锁、可中断锁、多个条件变量等功能。
- Semaphore:允许多个线程同时访问共享资源,但是限制访问的线程数量。可以用于控制并发访问的线程数量,避免系统资源被过度占用。
- CountDownLatch:允许一个或多个线程等待其他线程执行完毕之后再执行,可以用于线程之间的协调和通信。
- CyclicBarrier类:允许多个线程在一个栅栏处等待,直到所有线程都到达栅栏位置之后,才会继续执行。
二:Semaphore、CountDownLatch、CyclicBarrier区别?
它们都可以用来协调多个线程之间的执行。
- Semaphore是一个计数信号量,它允许多个线程同时访问共享资源,并通过计数器来控制访问数量。通常用来实现一个线程需要等待获取一个许可证才能访问共享资源,或者需要释放一个许可证才能完成操作的操作。
- CountDownLatch是一个计数器,通常用来实现一个线程等待其他多个线程完成操作之后再继续执行的操作。
- CyclicBarrier是一个同步屏障,通常用来实现多个线程在同一个屏障处等待,然后再一起继续执行的操作。