juc面试题目

  • Post category:other

JUC面试题目攻略

JUC(Java Util Concurrent)是Java中用于并发编程的工具包,包含了许多用于多线程编程的类接口。在JUC面试中,常见的问题包括线程池、锁、原子类等。本攻略将详细介绍JUC面试题目的解答方法,并提供两个示例说明。

线程池

问题1:线程池的作用是什么?

答:线程池是一种用于管理程的机制,它可以在需要时创建线程,并在不需要时用线程。线程池可以提高程序的性能和可伸缩性,避免了频繁创建和销毁线程的开销。

问题2:线程池的核心参数有哪些?

答:线程池的核心参数包括:

  • corePoolSize:线程池的核心线程数。
  • maximumPoolSize:线程池的最大线程数。
  • keepAliveTime:线程池中空闲线程的存活时间。
  • workQueue:用于存储等待执行的任务的阻塞队列。
  • threadFactory:用于创建新线程的工厂。
  • handler:用于处理被拒绝的的处理器。

示例1:使用线程池执行任务

以下是一个使用线程池执行任务的示例代码:

ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 100; i++) {
    executor.execute(() -> {
        // 执行任务
    });
}
executor.shutdown();

在上面的代码中,我们使用Executors.newFixedThreadPool()方法创建一个固定大小的线程池,并使用execute()方法提交100个任务。然后,我们使用shutdown()方法关闭程池。

问题1:什么是可重入锁?

答:可重入锁是一种支持重复获取锁的锁,也称为递归锁。当线程持有一个可重入锁时,它可以重复获取该锁而不会被阻塞。可重锁可以避免死锁和提高程序的性能。

问题2:什么是公平锁和非公平锁?

答:公平锁是一种按照线程请求的顺序来获取锁的锁,即先到先得。非公平锁是一种不按照线程请求的顺序来获取锁的锁,即先到不一定先得。公平锁可以避免线程饥饿,但会降低程序的性能。

示例2:使用可重入锁保证线程安全

以下是一个使用可重入锁保证线程安全的示例代码:

class MyService {
    private ReentrantLock lock = new ReentrantLock();

    public void doSomething() {
        lock.lock();
        try {
            // 执行线程安全的操作
        } finally {
            lock.unlock();
        }
    }
}

在上面的代码中,我们使用ReentrantLock类创建一个可重入锁,并在需要时获取锁并执行线程安全的操作。然后,我们使用unlock()方法释放锁。

以上是关于JUC面试题目的完整攻略,包括线程池和锁的相关问题和示例说明。