总结一下java并发包的学习

本文深入探讨Java并发包的关键组件,包括Semaphore、CountDownLatch、Phaser等类的使用及原理,解析多线程同步机制,如减法操作的Semaphore和CountDownLatch,加法操作的CyclicBarrier和Phaser。同时,覆盖线程池、Future接口、CompletionService接口及Timer类的高级应用,适合Java开发者进阶学习。

总结一下java并发包的学习

首先是一些跟线程相关的概念

1.多线程的同步概念就是排着队去执行一个任务,执行任务是一个一个去执行的,并不能并行执行

这里衍生出一个概念 —> 线程安全问题

我想这应该就是多线程在操作同一个数据或者数据结构时产生异常或者是出现脏数据吧。

1.Semaphore类
2.CountDownLatch类
3.Phaser类
4.ReentrantLock
5.CyclicBarrier
。。。等等


1.关于Semaphore

Semaphore semaphore = new Semaphore(permit数值);
·这个permit数值并不是最终许可值,而是初始值。可以调用release()方法增加许可值。

·这个类还有tryAcquire(),acquireUninterruptibly()等方法。

avaiablePermits() 返回可用许可数。

drainPermits() 返回可用许可数并将其设为0.

getQueueLength() 取得等待许可的线程个数。

hasQueuedThreads() 判断有没有线程在等待许可。

Semaphore是减法操作。


2.CountDownLatch与CyclicBarrier作为工具类

2.1 支持同步计数重置

2.2 等待同步线程

CountDownLatch类的使用效果之一:

给定一个计数。当使用这个类的线程计数不为0的时候,则wait,为0的时候则继续运行。

CountDownLatch是减法操作。

实现等待: await()

继续运行: countDown() ----》 这是-1操作

CyclicBarrier类的大致了解:

具有CountDownLatch功能,还可以循环地实现线程要一起做任务的目标。

CyclicBarrier是加法操作。

也就是多个Parties线程都执行了cyclicBarrier的await()方法程序才会继续执行。


3.Phaser类 移相器

这个类解决了 cyclicBarrier不可动态添加parties计数的问题 +
调用一次await()仅占用一个parties计数的问题

jdk1.7特性,加法操作

arriveAndAwaitAdvance() 类比 await()

phaser类具有设置多屏障的功能。

phaser类提供了动态增减parties计数,通过若干个方法来控制多个线程之间同步运行的效果,还可以实现针对某一个线程取消同步运行的效果。而且,他支持在屏障处等待,在等待时还支持中断或者非中断的功能,

问题如下:

1.如何实现JAVA多线程

ans:
1.实现Runnable接口
2.继承Thread类
3.实现Callable接口

区别: 前两者无法获取线程的返回值,第三个方式可以获取到一个Future的类对象,使用future的类对象.get()方法可以获取到返回值。

2.Semaphore怎么使用?

ans:
作为某个类的成员对象,在需要并发调用的方法中,使用Semaphore类中的acquire()以及release()方法包裹住并发执行的代码块。
其中,还可以使用ReentrantLock类的lock()方法以及unlock()方法进行锁。
这样可以使执行任务的顺序是同步的,也就是多线程,单处理。

线程池方面:

jdk自带的线程池ThreadPool ----> jdk1.5 特性

1.创建无界线程池

ExecutorService es = Executors.newCachedThreadPool();

这里使用Executor工厂类获取线程池。

还有一些概念如:

有界线程池–》就是限制了线程个数的线程池–》这里还包含了单一线程池

corePoolSize–》池中所保存的线程数,包括空闲线程,即核心池大小

超时时间–》当线程数超过核心池大小后,空闲线程在超时时间内仍没有被使用则释放资源(线程)

maximunPoolSize --》池中最大线程数

线程池还有一个执行线程任务前用于保持任务顺序的队列。


关于Future接口:

优点是可以在线程中返回数据以便进行后期的处理,但Future的实现类FutureTask会有阻塞性。


关于CompletionService接口:

它是异步的方式一边生产新的任务,一边处理已经完成的任务的结果。
|
|

将执行任务和处理任务分离。

执行任务–》submit()

处理任务–》take() -->按时间顺序处理他们的结果

接口的实现类为 ExecutorCompletionService。


关于Timer类:

计划任务Timer提供了以计时器或计划任务的功能来实现按照指定的时间或者时间间隔来执行任务,但由于Timer工具类并不是使用Pool而是使用了队列来管理线程,在高并发下效率较低。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值