
JAVA多线程
文章平均质量分 74
david_huang_84
这个作者很懒,什么都没留下…
展开
-
JAVA线程池浅析
线程池的概念在谈到线程池之前,我们先说一说什么是线程与进程的区别与联系。每一个JAVA程序都是一个进程,在某些场景下,为了获得更好的处理性能,缩短处理时间,可以启动多线程来并发执行任务。每一个进程包含一到多个线程,其中一个为主线程;一个线程从属于一个进程。多线程概念的提出主要是为了充分利用CPU资源,在当前多核CPU的计算机上,并行执行任务,提高性能,缩短任务执行时间。但是线程会占用计...原创 2018-08-22 22:34:20 · 280 阅读 · 0 评论 -
synchronized关键字浅析
背景在实际工程实践中,多线程并发执行场景十分常见。所谓线程安全性即是多线程并发执行场景中需要保证的基本要求,如果不能保证线程安全性,那么势必会在实际工程实践中产生错误数据、甚至严重且不易察觉的异常处理,导致最终结果的不确定性。对于临界资源,或者是必须串行操作的流程,势必需要保证多个线程中每次仅有一个线程持有或仅有一个线程进入。如何保证多个线程由并行转串行,去持有临界资源或进入必须串行操作的流程...原创 2018-08-31 22:38:31 · 1251 阅读 · 0 评论 -
Condition浅析
背景我们在谈到多线程并发访问临界资源的时候,通常会想到Object类的monitor锁和wait/notify(条件等待/通知)操作。很多同学会想问,既然有了加锁/解锁机制,为什么还要引入条件等待/通知操作呢?原因在于,当A线程对临界资源加锁后(排他锁),其他线程将无法再次获取该临界资源,直到A线程将锁释放。如果A线程执行很久,那么其他线程将在很长一段时间内无法持有临界资源的锁。但是对于Obj...原创 2018-09-07 21:43:32 · 429 阅读 · 0 评论 -
CountDownLatch浅析
背景前边的文章中已经介绍了JAVA多线程并发工程实践中一批常用的类,比如最为核心的AQS(AbstractQueuedSynchronizer),基本上JAVA多线程并发实践中的常用类的实现都与它能扯上关系;比如ReentrantLock,它实现了可重入的锁,一定程度上弥补了synchronized关键字的不足;比如Condition,它与ReentrantLock相结合,实现了条件等待队列,...原创 2018-09-08 18:40:13 · 1479 阅读 · 0 评论 -
Semaphore浅析
背景在之前的文章中介绍了ReentrantLock、Condition和CountDownLatch这些在JAVA多线程中常用的类,它们各有各的使用场景。ReentrantLock通常用于需要可重入锁定、带超时时间的获取锁等场景,Condition通常用于将线程加入条件等待队列/唤醒的场景,CountDownLatch通常用于在程序执行过程中设置等待点,待一定数额的线程全部到达等待点之后集合在...原创 2018-09-08 21:56:05 · 719 阅读 · 0 评论 -
ReentrantLock浅析
背景在之前的文章中提到了多线程并行操作在工程实践中的重要作用,也提到了如何保持临界资源和串行代码段的线程安全性是十分必要的。在计算机领域,是采用锁来保证线程安全性的。JAVA提供了多种锁的机制,比如早期的synchronized关键字,以它的简单易用被很多早期代码所采纳。但是后来开发者们发现,synchronized关键字没有提供很好的超时机制,且当多线程需要持有的锁相互依赖时容易导致死锁,因...原创 2018-09-06 23:03:13 · 261 阅读 · 0 评论