首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

面试系列之-同步容器与高并发容器(JAVA基础)

除了提供对SortedSet进行同步包装的方法之外,java.util.Collections还提供了一系列对其他的基础容器进行同步包装的方法,如synchronizedList()方法将基础List包装成线程安全的列表容器,synchronizedMap()方法将基础Map容器包装成线程安全的容器,synchronizedCollection()方法将基础Collection容器包装成线程安全的Collection容器与同步包装方法相对应,java.util.Collections还提供了一系列同步包装类,这些包装类都是其内部类。这些同步包装类的实现逻辑很简单:实现了容器的操作接口,在操作接口上使用synchronized进行线程同步,然后在synchronized的临界区将实际的操作委托给被包装的基础容器。‍高并发容器:‍ JUC高并发容器是基于非阻塞算法(或者无锁编程算法)实现的容器类,无锁编程算法主要通过CAS(Compare And Swap)+Volatile组合实现,通过CAS保障操作的原子性,通过volatile保障变量内存的可见性。无锁编程算法的主要优点如下: (1)开销较小:不需要在内核态和用户态之间切换进程。 (2)读写不互斥:只有写操作需要使用基于CAS机制的乐观锁, 读读操作之间可以不用互斥。 JUC包中提供了List、Set、Queue、Map各种类型的高并发容器,如ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、CopyOnWriteArrayList和CopyOnWriteArraySet。在性能上,ConcurrentHashMap通常优于同步的HashMap,ConcurrentSkipListMap通常优于同步的TreeMap。当读取和遍历操作远远大于列表的更新操作时,CopyOnWriteArrayList优于同步的ArrayList。 List:JUC包中的高并发List主要有CopyOnWriteArrayList,对应的基础容器为ArrayList。CopyOnWriteArrayList相当于线程安全的ArrayList,它实现了List接口。在读多写少的场景中,其性能远远高于ArrayList的同步包装容器。 Set:·CopyOnWriteArraySet继承自AbstractSet类,对应的基础容器为HashSet。其内部组合了一个CopyOnWriteArrayList对象,它的核心操作是基于CopyOnWriteArrayList实现的。 ·ConcurrentSkipListSet是线程安全的有序集合,对应的基础容器为TreeSet。它继承自AbstractSet,并实现了NavigableSet接口。ConcurrentSkipListSet是通过ConcurrentSkipListMap实现的。 Map:·ConcurrentHashMap对应的基础容器为HashMap。JDK 6中的ConcurrentHashMap采用一种更加细粒度的“分段锁”加锁机制,JDK 8中采用CAS无锁算法。 ·ConcurrentSkipListMap对应的基础容器为TreeMap。其内部的SkipList(跳表)结构是一种可以代替平衡树的数据结构,默认是按照Key值升序的。 Queue:JUC包中的Queue的实现类包括三类:单向队列、双向队列和阻塞队列。 ·ConcurrentLinkedQueue是基于列表实现的单向队列,按照FIFO(先进先出)原则对元素进行排序。新元素从队列尾部插入,而获取队列元素则需要从队列头部获取。 ·ConcurrentLinkedDeque是基于链表的双向队列,但是该队列不允许null元素。ConcurrentLinkedDeque可以当作“栈”来使用,并且高效地支持并发环境。 ·ArrayBlockingQueue:基于数组实现的可阻塞的FIFO队列。 ·LinkedBlockingQueue:基于链表实现的可阻塞的FIFO队列。 ·PriorityBlockingQueue:按优先级排序的队列。 ·DelayQueue:按照元素的Delay时间进行排序的队列。 ·SynchronousQueue:无缓冲等待队列。

02

享学课堂谈-Python初学者的设计模式入门

有没有想过设计模式到底是什么?通过本文可以看到设计模式为什么这么重要,通过几个Python的示例展示为什么需要设计模式,以及如何使用。 设计模式是什么? 设计模式是经过总结、优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码。反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。设计模式不会绑定具体的编程语言。一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性)。最为重要的是,设计模式也是一把双

08

一边吃瓜看球,一边完成AI应用实践——手写体识别入门

作者 | 邹欣 编辑 | 姗姗 【人工智能头条导读】又是一个很有热度的周末,除了炎热的天气,还有火热的世界杯。今天人工智能头条为大家准备的技术干货,让大家可以在空调下,吃瓜看球两不耽误就可以轻松完成AI应用实践入门。多少次,在我们查找很多资源、技术指导后,实操时还是会被一个报错而终止了前进的道路。小编也曾经历过这样的心路历程,所以一份好的指南对于刚开始实践操作的同学来说简直太有爱了,不仅节约了很多时间,操作和思路也都是清晰的。如果你是刚入门的AI小白,想通过一些简单的应用实践对AI应用有更深入的了解,现在就

02

每日论文速递 | 基于例子还是基于规则:Transformers是如何进行数学运算的?

摘要:尽管在各种复杂任务中表现出色,但现代大型语言模型(LLM)仍然难以处理一些对人类来说简单直观的数学问题,例如加法。虽然我们可以很容易地学习加法的基本规则,并将其应用于任何长度的新问题,但LLM也很难做到这一点。相反,他们可能依赖于训练语料库中看到的类似“案例”来寻求帮助。我们将这两种不同的推理机制定义为“基于规则的推理”和“基于案例的推理”。由于基于规则的推理是必不可少的,获得系统的泛化能力,我们的目标是探索究竟是基于规则的或基于案例的推理Transformers器的数学问题。通过精心设计的干预实验五个数学任务,我们证实,Transformers进行基于案例的推理,无论是否使用便笺,这与以前的观察,变压器使用子图匹配/快捷学习的原因。为了缓解这些问题,我们提出了一个规则遵循微调(RFFT)技术教Transformers执行基于规则的推理。具体来说,我们在输入中提供明确的规则,然后指示Transformers背诵并一步一步地遵循规则。通过RFFT,我们成功地使LLM在1-5位数加法上进行微调,以超过95%的准确度推广到12位数加法,比暂存器高出40%以上。这一显著的改进表明,教授LLM显式使用规则有助于他们学习基于规则的推理,并在长度上更好地概括。

01

AnyMAL:一种高效、可拓展的任意模态增强语言模型

大语言模型(LLMs)因其庞大的规模和复杂性而著名,显著增强了机器理解和表达人类语言的能力。LLMs的进步也推动了视觉-语言领域的显著进展,缩小了图像编码器与LLMs之间的差距,结合了它们的推理能力。之前的多模态LLM研究主要集中在结合文本和另一种模态的模型上,如文本和图像模型,或专注于未开源的专有语言模型。为了解决这些挑战,本文介绍了一种新的多模态增强语言模型(AnyMAL),它是一系列多模态编码器的集合,这些编码器被训练用于将来自不同模态(包括图像、视频、音频和IMU运动传感器数据)的数据转换为LLM的文本嵌入空间。通过扩展先前的工作,AnyMAL采用更强大的指令调优LLMs、更大的预训练模态编码器和先进的投影层来处理变长输入。

01
领券