JDK并发包

java高并发程序设计 - 网易云课堂

一、重入锁

重入锁是synchronized,Object.wait(),Object.notify()和替代品;

重入锁的类是:java.util.concurrent.locks.ReentrantLock;

代码如:

lock=new ReentrantLock();

lock.lock();   //加锁

.....

lock.unlock();//解锁

二、中断响应

lock=new ReentrantLock();

lock2=new ReentrantLock();

lock.lockInterruptibly();  //请求锁

.....

lock2.interrupt();   //发出中断信号

三、锁申请等待限时

lock.tryLock();返回值是boolean类型;接收两个参数,一个表示等待时长,第二个表示记时单位;没参数时,是不等待;如果获取了锁,返回true;

与lock.tryLock()对应的方法解锁lock.unLock();

四、公平锁

默认情况下,锁是非公平的;synchronized实现的锁就是非公平的;

lock=new ReentrantLock(true);这就是公平锁,公平锁耗资源;

五、ReenreantLock的几个重要方法:

lock();获得锁,如果锁已经被占用,则等待;

lockInterruptibly();获得锁,但优先响应中断;

tryLock();尝试获得锁,如果成功获取,返回true;否则返回false;

tryLock(long time,TimeUnit unit);同上,只是在给定的时间内尝试去获得锁;

unlock();释放锁;

六、重入锁的好搭档,Condition条件

await();使当前线程等待,同时释放当前的锁;当其它线程singal()之后,此线程会重新获得锁并继续执行。

awaitUninterruptibly();与await()方法基本想同,但不会在等待过程中响应中断;

singal()用于唤醒一个在等待中的线程;

七、信号量(semaphore)

信号量可以指定多个线程,同时访问某一个资源;synchronized与重入锁ReentrantLock,一次都只允许一个线程访问一个资源;

其构造方法:

public Semaphore(int permits);参数表示可以申请多少个许可;

public Semphore(int permits,boolean fair);第二个参数表示是否公平;

acquire()尝试获得一个准入的许可,若无法获得,则线程会等待,直到有线程释放一个许可或者当前线程被中断;

acquireUninterruptibly()方法与acquire()方法类似,但不响应中断;

tryAcquire()尝试获得一个许可,如果成功返回true,失败则返回false;

release()用于在线程访问资源结束后,释放一个许可;

八、读写分离锁(ReadWriteLock)

ReentrantReadWriteLock

九、多线程控制工具类

倒计时器 CountDownLatch;

循环栅栏 CyclicBarrier;

十、线程阻塞工具类

LockSupport

十一、线程池

避免系统频繁地创建和销毁线程,可以让创建的线程进行复用。

JDK提供了一套Executor框架,其本质就是一个线程池。

工厂方法:

newFixedThreadPool();返回一个固定线程数量的线程池。

newSingleThreadExecutor();返回只有一个线程的线程池;

newCachedThreadPool();

newSingleThreadScheduledExecutor();在给定的时间执行某任务。如在某个固定的延时之后执行,或者周期性执行某个任务;

十二、分而治之。Fork/Join框架

ForkJoinPool线程池

十三、JDK的并发容器

程序就是算法加数据结构;这些并发容器都是线程安全的。JDK提供的这些容器大部分在:java.util.concurrent包下。

并发集合:适合于多线程场合。

ConcurrentHashMap,一个线程安全的HashMap;

CopyOnWriteArrayList,用在读多写少的场合,是个线程安全的list,其性能好于Vector;

ConcurrentLinkedQueue,是个线程安全的LinkedList;

BlockingQueue,是个接口,JDK内部通过链表(LinkedBlockingQueue)、数组(ArrayBlockingQueue)等方式实现了这个接口,表示阻塞队列,适用于数据共享的通道;

另外,Collections工具类可以将任意集合包装成线程安全的集合;如:

Map p=Collections.synchronizedMap(new HashMap());

ConcurrentSkipListMap的数据是有序的;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容