zoukankan      html  css  js  c++  java
  • Java多线程并发面试问答

    Java并发面试问答

    什么是原子操作?Java并发API中的原子类是什么?

    原子操作在单个任务单元中执行,而不受其他操作的干扰。在多线程环境中,原子操作是必需的,以避免数据不一致。

    int++不是原子操作。因此,当一个线程读取其值并将其递增1时,另一线程读取了较早的值,从而导致错误的结果。

    为了解决这个问题,我们必须确保对count的增量操作是原子的,我们可以使用Synchronization做到这一点,但是Java 5 java.util.concurrent.atomic为int和long提供了包装器类,可用于自动实现此目的不使用同步。

    Java并发API中的Lock接口是什么?与同步相比,它有什么好处?

    与使用同步方法和同步块相比,Lock接口提供了更广泛的锁定操作。它们允许更灵活的结构,可以具有完全不同的属性,并且可以支持多个关联的Condition对象。
    锁的优点是

    • 有可能使它们公平
    • 在等待Lock对象时,可以使线程响应中断。
    • 可以尝试获取锁,但是如果无法获取锁,则立即返回或在超时后返回
    • 可以在不同的范围内以不同的顺序获取和释放锁

    什么是Executor框架?

    在Java 5中,Executor框架是通过java.util.concurrent.Executor接口引入的。

    Executor框架是用于根据一组执行策略对异步任务的调用,调度,执行和控制进行标准化的框架。

    创建很多没有最大阈值限制的线程会导致应用程序用尽堆内存。因此,创建ThreadPool是更好的解决方案,因为可以合并和重用有限数量的线程。执行程序框架简化了用Java创建线程池的过程。

    什么是BlockingQueue?我们如何使用阻塞队列来实现生产者-消费者问题?

    java.util.concurrent.BlockingQueue是一个Queue,它支持以下操作:在检索和删除元素时等待队列变为非空,并在添加元素时等待队列中的空间变为可用。

    如果尝试将空值存储在队列中,则BlockingQueue不接受空值并抛出NullPointerException。

    BlockingQueue实现是线程安全的。所有排队方法本质上都是原子的,并使用内部锁或其他形式的并发控制。

    BlockingQueue接口是Java集合框架的一部分,它主要用于实现生产者-消费者问题。

    什么是Callable和Future?

    Java 5在并发包中引入了java.util.concurrent.Callable接口,该接口类似于Runnable接口,但是它可以返回任何Object并能够引发Exception。

    Callable接口使用泛型定义Object的返回类型。Executors类提供有用的方法来在线程池中执行Callable。由于可调用任务并行运行,因此我们必须等待返回的Object。可调用任务返回java.util.concurrent.Future对象。使用Future,我们可以找出Callable任务的状态并获取返回的Object。它提供了get()方法,可以等待Callable完成,然后返回结果。

    什么是FutureTask类?

    FutureTask是Future接口的基本实现类,我们可以将其与Executors一起使用以进行异步处理。在大多数情况下,我们不需要使用FutureTask类,但是如果我们要覆盖Future接口的某些方法并希望保留大多数基本实现,它将非常方便。我们可以扩展此类并根据我们的要求覆盖方法。

    什么是并发集合类?

    Java Collection类是fast-fail的,这意味着如果在使用迭代器遍历某个线程的同时更改了Collection,则iterator.next()将抛出ConcurrentModificationException。

    并发集合类支持检索的完全并发性和可调整的预期更新并发性。
    主要类是ConcurrentHashMap,CopyOnWriteArrayList和CopyOnWriteArraySet。

    什么是Executors类?

    Executors类为Executor,ExecutorService,ScheduledExecutorService,ThreadFactory和Callable类提供实用程序方法。

    Executors类可用于在Java中轻松创建线程池,这也是唯一支持执行Callable实现的类。

    Java 8中的并发API有哪些改进?

    一些重要的并发API增强功能包括:

    • ConcurrentHashMapcompute(),forEach(),forEachEntry(),forEachKey(),forEachValue(),merge(),reduce()和search()方法。
    • 可以显式完成的CompletableFuture(设置其值和状态)。
    • 执行程序newWorkStealingPool()方法使用所有可用处理器作为目标并行度来创建窃取线程池。

    “不积跬步,无以至千里”,希望未来的你能:有梦为马 随处可栖!加油,少年!

    关注公众号:「Java 知己」,每天更新Java知识哦,期待你的到来!

    • 发送「Group」,与 10 万程序员一起进步。
    • 发送「面试」,领取BATJ面试资料、面试视频攻略。
    • 发送「玩转算法」,领取《玩转算法》系列视频教程。
    • 千万不要发送「1024」...

    每日福利
    每日福利

  • 相关阅读:
    JS中的prototype
    Php5.3的lambda函数以及closure(闭包)
    JavaScript事件委托的技术原理
    css 里层元素撑不开外层元素
    扩展VirtualBox虚拟机磁盘容量
    easyUI 条件查询 跟分页数据展示写在了一起的
    (转)Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
    有想去北京工作的的想法了
    第一次写oracle SQL 两个表链接查询
    第三天 SQL小记
  • 原文地址:https://www.cnblogs.com/java-friend/p/11730399.html
Copyright © 2011-2022 走看看