
多线程
转身那一瞬
比较懒,此账号仅最为自己的笔记以及总结用
展开
-
10、带返回值的 多线程实现 Callable
package com.example.study01.common.LockDemo;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;/** * 多线程的方法 :Runnable */class MyThread implements Runnable{ @Over...原创 2019-11-28 10:09:56 · 128 阅读 · 0 评论 -
9、同步队列
存一个取一个package com.example.study01.common.LockDemo;import java.util.concurrent.BlockingQueue;import java.util.concurrent.SynchronousQueue;import java.util.concurrent.TimeUnit;/** * @Descript...原创 2019-11-25 09:46:21 · 131 阅读 · 0 评论 -
8、队列 API
add() remove() 是有边界的, * add 超出之后会报 "java.lang.IllegalStateException: Queue full" 异常 * remove 超出之后会报 "java.util.NoSuchElementException" 异常...原创 2019-11-25 09:46:05 · 394 阅读 · 0 评论 -
7、CountDownLatch 和 CyclicBarrier 、Semaphore 使用 (多线程)
CountDownLatch用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了 。(运行主线程开启子线程的时候,子线程还没有结束的时候,主线程可以一直等待,直到初始化的现成的计数器count为0,主线程就可以不用等待...原创 2019-11-25 09:45:55 · 152 阅读 · 0 评论 -
6、ReentrantReadWriteLock, 读写锁(手写 一个缓存)
多线程: 线程操作资源类* 缓存分三个方法* 1:读* 2:写* 3:清缓存* 用 ReentrantReadWriteLock 解决, 可重入的读写锁,提高并发效率package com.example.study01.common.LockDemo;import java.util.HashMap;import java.u...原创 2019-11-25 09:45:14 · 188 阅读 · 0 评论 -
5、独占锁、共享锁
独占锁:锁一次只能被一个线程锁持有。ReentrantLock 和 synchronized 都是独占锁共享锁:该锁可以被多个线程所持有原创 2019-11-25 09:45:08 · 105 阅读 · 0 评论 -
4、几种线程安全的Map解析
Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的。看下面两个场景:1、当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不安全的问题了。2、当用在单例对象成员变量的时候呢?这时候多个线程过来访问的就是同一个HashMap了,对同个HashMap操作这时候就存在线程安全的问题了。线程安全的Map为了...原创 2019-11-25 09:44:56 · 372 阅读 · 0 评论 -
3、可重入锁,又名递归锁
可重入锁/(递归锁)(默认是非公平锁) * 公平锁:先来后到 * 非公平锁:可能由县级翻转或者饥饿现象(后来的先获得锁) * synchronized 天生的可重入锁 * 定义: 线程可进入任何一个已经拥有锁的同步着的代码块package com.example.study01.common.LockDemo;import java.u...原创 2019-11-25 09:44:45 · 137 阅读 · 0 评论 -
2、自旋锁(原子引用,Unsafe 类),手写自旋锁
自旋锁不会立即阻塞,而是采用循环的方式获取锁,减少线程切换的消耗,缺点是循环会消耗CPU通过 使用 cas 原子引用,比较交换的原理(只不过当前比较的不是值,而是线程)package com.example.study01.common.LockDemo;import java.util.concurrent.TimeUnit;import java.util.concurre...原创 2019-11-25 09:44:34 · 375 阅读 · 0 评论 -
1、CAS 原理,Unsafe 原理
CAS: 比较并交换例子:原子整型(AtomicInteger)AtomicInteger num = new AtomicInteger(1);boolean b = num.compareAndSet(1, 2000);Cas 底层有的 Unsafe 类(当前对象,内存偏移量,期望值,更新值)/** * Atomically sets the value to...原创 2019-11-25 09:44:21 · 270 阅读 · 0 评论