![](https://img-blog.csdnimg.cn/79bf9c008a7c4e908ad931a70c7cb2d9.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程合集
文章平均质量分 96
各种线程安全小知识
绿皮龟
曾获得阿里云专家博主,阿里云乘风问答官,华为云云享专家,CSDN全栈领域新星创作者,支付宝开发者社区优秀创作博主,国家金融比赛二等奖获奖者,省物流比赛二等奖获得者,省电商赛二等奖获得者。
展开
-
三种方式模拟两个线程抢票【最全版】
在多线程编程中,资源竞争是一个常见的问题。资源竞争发生在多个线程试图同时访问或修改共享资源时,可能导致数据不一致或其他并发问题。在模拟两个线程抢票的场景中,我们需要考虑如何公平地分配票,并确保每个线程都有机会成功获取票。本篇文章将通过三种方式来模拟两个线程抢票的过程,以展示不同的并发控制策略。使用 Synchronized 来确保一次只有一个线程可以访问票资源。使用 ReentrantLock 来实现线程间的协调。使用 Semaphore 来限制同时访问票的线程数量。原创 2024-02-01 08:00:00 · 3022 阅读 · 33 评论 -
理解 AQS 和 ReentrantLock
在多线程编程中,同步机制是确保线程安全的关键。AQS(AbstractQueuedSynchronizer)和ReentrantLock是Java中两种常见的同步机制,它们各自具有不同的特性和适用场景。了解和掌握这两种机制对于编写高效、安全的并发程序至关重要。这篇文章将带你取了解和掌握这两种机制!另外值得一提的是:公平锁的实现与非公平锁是很像的,只不过在获取锁时不会直接尝试使用CAS来获取锁。只有当队列没节点并且state为0时才会去获取锁,不然都会把当前线程放到队列中。原创 2023-12-30 09:30:00 · 1162 阅读 · 9 评论 -
阿里推荐 LongAdder ,不推荐 AtomicLong !
在分布式系统中,计数器是一个常见的需求。为了实现高并发、高可用的计数器,我们需要选择一个合适的实现方式。在 Java 中,有两种常见的计数器实现方式:AtomicLong 和 LongAdder。最近,阿里巴巴在一份技术报告中推荐使用 LongAdder ,而不是 AtomicLong。本文将介绍这两种计数器的原理和优缺点,并分析为什么阿里巴巴推荐使用 LongAdder。原创 2023-12-21 11:24:15 · 1327 阅读 · 21 评论 -
Java 多线程的基本概念!
在当今的计算机世界中,多线程编程已经成为了一种重要的技术,它能够充分利用多核处理器和多线程硬件的优点,提高程序的执行效率。Java作为一种流行的编程语言,也提供了丰富的多线程编程支持。在Java中,多线程编程涉及到多个概念和机制,包括线程的创建、线程的状态、同步、并发和死锁等。这些概念和机制的学习和理解对于掌握Java多线程编程至关重要。在接下来的文章中,我们将详细介绍Java多线程编程的基本概念和机制,并通过示例代码和案例分析帮助你更好地理解和掌握这些知识。原创 2023-12-18 10:36:36 · 1192 阅读 · 19 评论 -
多线程到底用不用在业务代码上???
在当今的软件开发中,多线程技术是一种常见的优化方式,可以显著提高程序的性能和响应能力。然而,对于业务代码是否应该使用多线程,不同的开发者和专家可能会有不同的看法和经验。在这篇文章中,我们将探讨多线程在业务代码中的应用,并分析其利弊。综上所述,是否在业务代码中使用多线程需要根据具体情况来决定。如果业务系统需要同时处理多个任务,并且每个任务都可以独立地执行,那么使用多线程可以提高系统的性能和响应能力。然而,如果业务逻辑比较简单,或者系统的设计不允许使用多线程,那么使用单线程可能更加简单和安全。原创 2023-12-17 09:00:00 · 1042 阅读 · 15 评论 -
CountDownLatch和CyclicBarrier源码详解
我现在有个场景:现在我有50个任务,这50个任务在完成之后,才能执行下一个函数,要是你,你怎么设计?可以用JDK给我们提供的线程工具类,CountDownLatch和CyclicBarrier都可以完成这个需求。基于AQS实现,会将构造CountDownLatch的入参传递至statecountDown()就是在利用CAS将state减1,await)实际就是让头节点一直在等待state为0时,释放所有等待的线程。原创 2023-11-27 20:35:09 · 882 阅读 · 1 评论 -
不是吧?线程池这样搞?
学习线程池能够帮助我们更好地处理多线程编程,并提高程序的性能和稳定性。线程池指定线程数这块,首先要考量自己的业务是什么样的?是cpu密集型的还是io密集型的,假设运行应用的机器CPU核心数是N。 cpu密集型的可以先给到N+1,io密集型的可以给到2N 。原创 2023-11-23 21:12:46 · 900 阅读 · 0 评论