多线程
文章平均质量分 95
LemmonTreelss
引刀成一快,不负少年头
展开
-
【多线程】ReentrantLock重入锁
一、Lock接口 在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥、但在JDK1.5之后并发包中新增加了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显示地获取和释放锁,虽然它缺少了隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取或及超时获取锁等多种syn原创 2018-01-30 14:48:03 · 524 阅读 · 7 评论 -
【多线程】ReentrantReadWriteLock读写锁
一、前言 读写锁ReentrantReadWriteLock,其核心就是实现读写分离的锁,在高并发访问下,尤其是读多写少的情况下,性能要远高于重入锁。之前学synchronized、ReentrantLock时,同一时间内,只能有一个线程访问被锁定的代码,那么读写锁则不同,其本质是分成两个锁,即读锁、写锁。在读锁下,多个线程可以并发的进行访问,但是在写锁的时候,只能一个一个的顺序访原创 2018-02-04 17:27:30 · 284 阅读 · 5 评论 -
【多线程】线程安全、锁的同步和异步
一、基本概念 线程安全:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。 非线程安全:非线程主要是指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。 synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为“互斥区”或“临界区...原创 2018-01-22 20:13:36 · 10425 阅读 · 65 评论 -
【多线程】线程通信之join、ThreadLocal
一、方法join 在很多情况下,主线程创建并启动子线程,如果子线程中需要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。如果主线程想等待子线程执行完成之后在结束,比如子线程执行一个方法,主线程要取得这个方法的返回值,就要用到join()方法了。方法join的作用是等待线程对象销毁。线程Thread除了提供join方法之外,还提供了join(long millis)和join(...原创 2018-01-29 11:43:10 · 652 阅读 · 7 评论 -
【多线程】单例模式与多线程
一、前言 如何使单例模式遇到多线程是安全的、正确的? 我们在学习设计模式的时候知道单例模式有懒汉式和饿汉式之分。简单来说,饿汉式就是在使用类的时候已经将对象创建完毕,懒汉式就是在真正调用的时候进行实例化操作。二、饿汉式+多线程 public class MyObject { //饿汉模式 private static MyObject myObjec...原创 2018-02-08 08:59:41 · 669 阅读 · 13 评论 -
【多线程】如何保证线程安全
一、线程安全等级 之前的博客中已有所提及“线程安全”问题,一般我们常说某某类是线程安全的,某某是非线程安全的。其实线程安全并不是一个“非黑即白”单项选择题。按照“线程安全”的安全程度由强到弱来排序,我们可以将java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 1、不可变 在java语言中,不可变的对象一定...原创 2018-03-15 10:19:14 · 52183 阅读 · 62 评论 -
【线程池】异步任务
一、业务场景 最近在做项目时,遇到一个业务场景:由于手机浏览器直接加载大PDF文件可能会导致加载失败,因此当用户上传PDF文件到FastDFS的时候,需要将pdf原文件上传,并且按照pdf文件页数转化成对应的图片在上传到FastDFS上。因为PDF转图片是一个比较耗时的操作,因此需要用到异步任务。二、分析 首先想到的就是主线程去执行上传pdf原文件的操作,然后再开启一个线程来进...原创 2018-05-19 19:05:52 · 2506 阅读 · 15 评论