![](https://img-blog.csdnimg.cn/20210504215845488.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 61
java并发编程
在下喵星人
这个作者很懒,什么都没留下…
展开
-
ReentrantLock实现原理-如何实现一把锁(一)
锁作用可以抽象理解为避免共享资源被并发访问。按照这条概念我们在JAVA中可以定义一下实现。定义一个锁变量state。当多个线程同时范围同一个共享资源时,我们通过cas保证只有一个线程修改成功这个锁变量state成功,即获得锁。其他没有获得锁的线程,不断自旋尝试获得锁。当使用完共享资源时,还原state的值,让其他线程获得锁。定义锁接口public interface Lock { void lock(); void unlock();}按照上面原则具体实现如下:publ原创 2021-07-25 17:14:08 · 299 阅读 · 0 评论 -
java 中Unsafe介绍
Unsafe 是位于sun.misc包下的一个类,它可以让我们直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。Unsafe类为一单例实现,提供静态方法getUnsafe获取Unsafe实例,当且仅当调用getUnsafe方法的类为引导类加载器所加载时才合法,否则抛出SecurityException异常。原创 2021-07-25 11:42:37 · 1904 阅读 · 0 评论 -
BlockingQueue 使用(生产者-消费者)
java.util.concurrent包中的Java BlockingQueue接口表示一个线程安全的队列,可以放入并获取实例。在这篇文章中,我会告诉你如何使用这个BlockingQueue。本文将不讨论如何在Java中实现BlockingQueue。如果您对此感兴趣,在我的偏理论的Java并发教程中有一个关于阻塞队列的文章。###BlockingQueue 使用BlockingQueue通常用于使线程产生对象,而另一线程则使用该对象。这是一张阐明这一原理的图表。生产线程将持续生产新对象并将它原创 2021-05-04 22:20:37 · 382 阅读 · 0 评论 -
CountDownLatch 使用
java.util.concurrent.CountDownLatch是一个并发结构,它允许一个或多个线程等待一组给定的操作完成。CountDownLatch用给定的计数进行初始化。该计数通过调用countDown()方法递减。等待此计数达到零的线程可以调用await()方法之一。调用await()会阻塞该线程,直到计数达到零。下面是一个简单的例子。在Decrementer在CountDownLatch上调用countDown()3次之后,等待的Waiter将从await()调用中释放。CountDow原创 2021-05-04 22:18:21 · 113 阅读 · 0 评论 -
CyclicBarrier 使用
java.util.concurrent.CyclicBarrier类是一种同步机制,可以同步通过某种算法进行的线程。换句话说,它是所有线程必须等待的障碍,直到所有线程到达它为止,然后才能继续执行任何线程。这是一个图表说明:这些线程通过调用CyclicBarrier上的await()方法来相互等待。一旦有N个线程在CyclicBarrier中等待,所有线程都被释放并且可以继续运行。创建一个CyclicBarrier当你创建一个CyclicBarrier时,你可以指定有多少个线程等待它,然后释放它们原创 2021-05-04 22:15:59 · 181 阅读 · 0 评论 -
java并发编程之hook钩子线程
hook钩子线程简介JVM进程中没有活跃的非守护线程,或者受到了系统的中断信号,JVM进程便会退出。想JVM程序中添加一个hook线程,在JVM进程退出的时候,hook线程便会执行。我们可以使用hook线程防止程序重复启动或者回收系统资源。public class HookTest { public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread(){原创 2021-05-04 21:55:29 · 454 阅读 · 0 评论