文章分类 - thread
thread
摘要:概念 “自旋”可以理解为“自我旋转”,这里的“旋转”指“循环”,比如 while 循环或者 for 循环。“自旋”就是自己在这里不停地循环,直到目标达成。而不像普通的锁那样,如果获取不到锁就进入阻塞。 对比自旋和非自旋的获取锁的流程 自旋锁不会放弃 CPU 时间片,而是通过自旋等待锁的释放,也就是说
阅读全文
摘要:读写锁与ReentrantLock对比 普通的 ReentrantLock可以我们保证了线程安全,但是也浪费了一定的资源,因为如果多个读操作同时进行,其实并没有线程安全问题,我们可以允许让多个读操作并行,以便提高程序效率。 但是写操作不是线程安全的,如果多个线程同时写,或者在写的同时进行读操作,便会
阅读全文
摘要:公平锁与非公平锁 首先,我们来看下什么是公平锁和非公平锁,公平锁指的是按照线程请求的顺序,来分配锁;而非公平锁指的是不完全按照请求的顺序,在一定情况下,可以允许插队。但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而是仅仅“在合适的时机”插队。 合适的时机 假设当前线程在请求获取锁
阅读全文
摘要:synchronized与Lock相同点 都可以用于保证线程和资源安全 都可以保证可见性,锁的可见性,不同于volatile 对于 synchronized 而言,线程 A 在进入 synchronized 块之前或在 synchronized 块内进行操作,对于后续的获得同一个 monitor 锁
阅读全文
摘要:获取和释放 monitor 锁的时机 最简单的同步方式就是利用 synchronized 关键字来修饰代码块或者修饰一个方法,那么这部分被保护的代码,在同一时刻就最多只有一个线程可以运行,而 synchronized 的背后正是利用 monitor 锁实现的。所以首先我们来看下获取和释放 monit
阅读全文
摘要:最近使用线程池要等前面线程执行完了把结果汇总,于是想到了使用CyclicBarrier和线程池实现,当然CountDownlatch也是可以的,其他方式也可以的 直接上代码 上面红色标注的地方会导致程序阻塞,主要是Future的get()方法引起的,通过命令行输入jps找到对应的程序然后通过jsta
阅读全文

浙公网安备 33010602011771号