随笔分类 - 多线程
摘要:锁消除:JVM通过逃逸分析发现作为锁的对象是局部对象时,则会把锁消除来提高性能。 锁粗化:当JVM发现一个线程不停地进行一个资源的请求与释放时(循环),则会将同步代码块的范围扩大,提高性能。 偏向锁:消除事实上只有一个线程的情况下CAS造成的浪费问题。 轻量锁:如果持有锁的线程能在很短时间内释放锁资
阅读全文
摘要:要点 ThreadLocal是线程独有的,线程之间隔离。 ThreadLocal在整个线程上下文中都可以获得,可以避免参数的反复传递。 ThreadLocal在用完之后要通过finally清除,否则如果线程复用,会遗留到下一次处理中。 get() 1 public T get() { 2 Threa
阅读全文
摘要:ThreadPoolExecutor 在Java中可以创建的线程池类有很多,各自拥有不同的特性,但查看源码可以发现,这些线程池的创建在底层都调用了new ThreadPoolExecutor(),因此我们首先讨论ThreadPoolExecutor。 1 public ThreadPoolExecu
阅读全文
摘要:sychronized 关键字,无期限等待锁,读读也互斥,代码结束自动释放锁。 主要方法 obj.wait:释放锁,进入阻塞,等待唤醒(需要拿到锁) obj.notify:随机唤醒一个(需要拿到锁) obj.notifyAll:唤醒所有(需要拿到锁) 示例 1 public class Synchr
阅读全文
摘要:CountDownLatch 计数与阻塞是分离的(相对灵活),当计数器为0时释放阻塞线程,不可重置,不可复用。 参与计数的线程不用阻塞,需要阻塞的线程不用参与计数。 主要方法 await:阻塞当前线程(可设置超时时间) countdown:计数减1 getCount:返回当前计数 示例 1 publ
阅读全文
摘要:进程(Process) 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 线程(Thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发
阅读全文

浙公网安备 33010602011771号