并发
1.JUC下面的类有哪些
JUC就是java.util.concurrent包,这个包俗称JUC,里面都是解决并发问题的一些东西
该包的位置位于java下面的rt.jar包下面:
CountDownLatch
CyclicBarrier
Semaphore
ExChanger
CountDownLatch:
CountDownLatch,俗称闭锁,作用是类似加强版的Join,是让一组线程等待其他的线程完成工作以后才执行
就比如在启动框架服务的时候,我们主线程需要在环境线程初始化完成之后才能启动,这时候我们就可以实现使用CountDownLatch来完成
CyclicBarrier:
CyclicBarrier,俗称栅栏锁,作用是让一组线程到达某个屏障,被阻塞,一直到组内的最后一个线程到达,然后屏障开放,接着,所有的线程继续运行
Semaphore:
Semaphore,俗称信号量,作用于控制同时访问某个特定资源的线程数量,用在流量控制
特定资源控制,第一时间就想到了数据库连接,Semaphore 可以用来写数据库连接池
ExChanger:
Exchanger,俗称交换器,用于在线程之间交换数据,但是比较受限,因为只能两个线程之间交换数据
2.ConcurrentHashMap最大支持多少并发
ConcurrentHashMap的缺点就是他最多只能支持16个线程的并发,如果实际场景中,你需要启动的线程的数量比较多,还是同样会发生锁竞争和等待的问题
3.是否遇到过多线程方面的异常
(1) InterruptedException 异常
在Java多线程编程中,线程中断是一种常见的操作。当使用Thread.interrupt()方法请求中断线程时,线程会抛出InterruptedException异常。当线程处于阻塞状态时,例如调用Thread.sleep()方法、Object.wait()方法或者可中断的I/O操作时,如果线程被中断,InterruptedException异常也会被抛出。
在处理InterruptedException异常时,一般需要做好线程的清理工作,并且通过Thread.currentThread().interrupt()方法再次设置线程中断标志,以便上层代码可以正确地处理中断请求。
(2) IllegalMonitorStateException 异常
IllegalMonitorStateException是Java多线程中常见的异常之一,当在非同步的代码块中调用Object类的wait()方法或notify()方法时,就会抛出该异常。在Java中,这两个方法的调用必须在同步的代码块中执行,是指代码块已经获取了对象的锁,才可以使用这两个方法。
出现IllegalMonitorStateException异常的原因是线程没有正确地实现同步,具体表现为没有获取对象的锁就进行了wait()或notify()操作。在编写多线程程序时,应当确保对线程的访问是同步的,以避免出现IllegalMonitorStateException异常。
(3) NullPointerException 异常
NullPointerException是Java编程中常见的异常之一,当一个对象为空(null)时调用它的方法或访问它的属性,就会抛出NullPointerException异常。
在多线程编程中,NullPointerException异常常常出现在一些共享变量或公共资源没有被正确地初始化或者为空的情况下。为了避免NullPointerException异常的出现,应当在多线程程序中尽量避免共享变量或者使用volatile或synchronized关键字确保共享变量或公共资源的正确性。