1:volatile:内存可见性,在多线程场景下操作数据共享数据时,彼此不可见。
2:对于原子性的包装类:AtomicInteger,AtomicLong...
e.g.
AtomicInteger serialNumber = new AtomicInteger();
// ++
serialNumber.getAndIncrement();
3:CountDownLatch 闭锁:在完成某些运算时,只有其他所有线程的运算全部完成,当前运算才继续执行
e.g.
// @param count the number of times {@link #countDown} must be invoked
// before threads can pass through {@link #await}
CountDownLatch countDownLatch = new CountDownLatch(int count);
// 调用的线程数-1 释放一个锁 sync.releaseShared(1);
latch.countDown();
// 阻塞线程
countDownLatch.await();
4:容器类: concurrentHashMap 分段锁:默认16个段 concurrentLevel,多线程并行提升效率,1.8以后采用CAS(compare-and-swap):也称无锁算法,保证数据的原子性,硬件对于并发操作的支持 包含三个参数: 内存值V 预估值A 更新值B 当且仅当V==A时,V=B,否则不做任何操作。 ConcurrentSkipListMap 优于 TreeMap 当期望的读数和遍历远远大于列表的更新数时,CopyOnWriteArrayList 优于 ArrayList
5:callable 相较于实现Runnable接口的方式,方法可以有返回值,并且可以抛出异常;
e.g.
public static void main(String[] args) {
ThreadDemo threadDemo = new ThreadDemo();
// 执行Callable方式,需要FutureTask实现类的支持,用于接收运算结果
FutureTask<Integer> result = new FutureTask<>(threadDemo);
new Thread(result).start();
try {
//futureTask 可用于闭锁
Integer sum = result.get();
System.out.println(sum);
} catch (Exception e) {
e.printStackTrace();
}
}
6:* synchronized:隐式锁 * 1 同步代码块 * 2 同步方法 * 3 同步锁 lock 是一个显示锁,需要通过lock()方法上锁,必须通过unlock()方法进行释放锁
未完待续。。。