自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 基于AQS实现共享锁(Semaphore信号量的大致实现思路)

共享锁:线程可以同时持有。实现代码如下:import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;/** * 共享锁 */public class SharedLock imple

2021-11-22 10:16:29 410

原创 基于AQS实现可重入的互斥锁(ReentrantLock的大致实现思想)

代码中有详细注释,这里不做说明了,解释一下涉及到的名词:AQS:AbstractQueuedSynchronizer。是所有并发工具实现的框架基础。可重入锁:自己可以重新获取自己当前获取的锁(比较绕口),不可重入的话自身会把自身锁死!非公平锁:后来的线程可能先拿到锁,即拿到所的顺序是不公平的(这样反而性能更好)互斥锁:只有一个线程能拿到锁,其他线程会被阻塞。实现代码如下:import java.util.concurrent.TimeUnit;import java.util.c

2021-11-19 18:11:37 510

原创 ThreadLocal与InheritableThreadLocal

ThreadLocal的解析在之前文档中有对应的篇章这里主要解析InheritableThreadLocalInheritableThreadLocal由上图可见,InheritableThreadLocal 继承自 ThreadLocal,主要用于将父线程中的值传输到子线程!主要的三个方法如下:// 子类独有方法,返回父类的值,parentValue ThreadLocal的泛型protected T childValue(T parentValue) { .

2021-11-19 17:54:50 329

原创 ThreadLocal的用法和说明及注意事项

ThreadLocalThreadLocal是用于解决Java并发安全性问题的一个类。其主要作用是防止不同线程中的数据冲突。原理图如下:原理说明:创建一个ThreadLocal<V>类的对象,默认会在每一个线程中都开启一小片区域,该片区域可以理解为kay value格式的(实质上是在Thread中有内部类ThreadLocalMap,每声明了一个ThreadLocal,就相当于在这个ThreadLocalMap中设置了一个<key,value>,因为线程是相.

2021-11-19 17:35:37 2705

原创 forkjoin分而治之的介绍和使用

Fork-Joinjava下多线程的开发可以我们自己启用多线程,线程池,还可以使用forkjoin,forkjoin可以让我们不去了解诸如Thread,Runnable等相关的知识,只要遵循forkjoin的开发模式,就可以写出很好的多线程并发程序,分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同(子问题相互之间有联系就会变为动态规范算法),递归地解这些子问题,然后将各子问题的解合.

2021-11-19 16:47:11 553

原创 Callable和CompletionService的使用

CompletionService异步

2021-11-18 16:48:34 199

原创 Callable和FutureTask的使用

1 Callable 接口接口内部仅有一个call()方法,方法返回类型为接口泛型定义的类型。实现类重写内部方法后,通过Future接口的包装类进行包装,来实现Runable接口,从而能够开启新的线程。与Runable不同的是:Runable执行的run()方法返回值是void,如果在工作需要中需要通过分线程获取执行结果,Runable就不能满足需求了。Callable接口通过泛型能够控制call的返回类型,因此,需要有返回的时候通常使用Callable。实现类如下图例:(如果cal..

2021-11-18 16:14:38 2991

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除