java高并发程序设计2-JDK并发包

为什么要有JDK并发包呢?因为为了多线程安全。。。。


下面主要从三个部分来了解JDK并发包(java.util.concurrent):多线程的团队协作(同步控制)、线程复用(线程池)、不要重复发明轮子(JDK的并发容器)

一、同步控制:synchronized,ReentrantLock,Semaphore,ReadWriteLock,ThreadLocal
1、sychronized :参考文章
2、ReentrantLock : 参考文章
3、Semaphore:参考文章
4、ReadWriteLock:参考文章
5、ThreadLocal:参考文章 参看文章

ThreadLocal解决spring单例模式(scope=singleton)下的线程安全问题
spring在加载bean的时候有四种配置:singleton,prototype,request,session,
而默认情况下是采用singleton,那么在多线程下,如何保证线程安全呢。就可以用ThreadLocal来解决。

6、CountDownLatch:参考文章
7、CyclicBarrier:参考文章
二、线程池:
1、线程池的种类:
public static ExecutorService newFixedThreadPool(int nThreads)//创建一个固定大小的线程池
public static ExecutorService newSingleThreadExecutor()//创建只有一个线程的线程池
public static ExecutorService newCachedThreadPool()//创建具有无限的线程池

public static ScheduledExecutorService newScheduledThreadPool()
public static ExecutorService newFixedThreadPool(int corePoolSize)
2、前面三个线程池的核心实现(ThreadPoolExecutor)

ThreadPoolExecutor的参数:
1、corePoolSize:
2、maximumPoolSize:
3、keepAliveTime:(非核心线程的存活时间)
4、unit:
5、workQueue:(这四个都是基于实现BlockingQueue接口来实现的)
SynchronousQueue
常用于newCachedThreadPool(因为这是一个无限容量的线程池,core为0,max为无穷大)
ArrayBlockingQueue
LinkedBlockQueue
常用在newFixedThreadPool(因为这个是一个固定大小的线程池,所以当很多线程产生时会有很多线程产生阻塞)
④PriorityBlockingQueue

6、threadFactory:
7、handle:
默认的拒绝策略有四种:
在这里插入图片描述
AbortPolicy:该策略会直接抛出异常,阻止系统正常工作
在这里插入图片描述
CallerRunsPolicy:只要线程池未关闭,该策略直接在调用者线程中,运行当前被丢弃的任务。
在这里插入图片描述
DiscardOldestPolicy:该策略将丢弃最老的一个请求
在这里插入图片描述

DiscardPolicy:默默丢弃无法处理的任务,不予任何处理。如果允许任务丢失,这是最好的方式。

在这里插入图片描述
通过上面的代码我们可以发现这四种策略都是基于实现RejectedExecutionHandler的。这样我们也可以自己实现这个借口来创建拒绝策略

三、JDK并发容器

为了解决java集合类Collection的不安全而存在
1、concurrentHashMap比较深入的解析---->HashMap
2、CopyOnWriteArrayList—>ArrayList
3、ConcurrentLinkedQueue—>LinkedList(高效的并发队列)
相比较于BlockingQueue(ArrayBlockingQueue(读写锁不分离),LinkedBlockingQueue)(读写锁分离),ConcurrentLinkedQueue是采用CAS模式进行的,不加锁。

4、BlockingQueue(这是一个接口,主要的实现方式有ArrayBlockingQueue和LinkedBlockingQueue。功能用途超级多的一个阻塞队列),经常用于生产者和消费者模式
5、ConcurrentSkipListMap(用来进行快速查找)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值