
并发
学习并发的笔记
阳光zfc
从哪儿跌倒,从哪儿爬起来。
展开
-
守护线程
在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)。用户线程是指用户自定义创建的线程,主线程停止,用户线程不会停止,只要当前JVM实例中尚存在任何一个非守护线程没有结束,JVM进程就永远不会结束;当你希望关闭某些线程的时候,或者退出JVM进程的时候,一些线程能自动关闭,此时守护进程就可以。Daemon的作用是为其他线程的运行提供便利服务,守护线程最...原创 2020-01-10 16:42:45 · 157 阅读 · 0 评论 -
线程池
固定线程池 public class ThreadPoolDemo1 { public static void main(String[] args) { ExecutorService service = Executors.newFixedThreadPool(5); for(int i=0;i<6;i++){ servic...原创 2020-01-10 15:15:21 · 190 阅读 · 0 评论 -
锁的原理分析
java对象 包括对象头(mark word(8 byte,),klass(4 byte)),对象的实例数据,对齐字节 在mark word中,hashcode占56位。这里需要认真分析Mark Word信息。 根据对象状态可分为无锁状态,加锁状态,GC标记状态,如下图。 最后一个为重量级锁 性能对比,单位为毫秒,数字做参考。 ...原创 2020-01-08 21:14:17 · 463 阅读 · 0 评论 -
练习
文章目录1.ThreadLocal2.有10000张火车票,同时有10个窗口对外售票3.CopyOnWriteList 写时复制容器4.Collections5.Queue6.ConcurrentHashMap7.LinkedBlockingQueue8.ArrayBlockingQueue9. DelayQueue10.TransferQueue11.SynchronizedQueue 同步队列...原创 2020-01-08 15:48:48 · 160 阅读 · 0 评论 -
ReentrantLock()
reentrantlock用于替代synchronized * 使用reentrantlock可以完成同样的功能 * reentrantlock必须要手动释放锁 * 使用syn锁定的话如果遇到异常,jvm会自动释放锁,但是lock必须手动释放锁, * 因此经常在finally中进行锁的释放 public class RLDemo1 { Lock lock = new Reentr...原创 2020-01-08 09:11:32 · 271 阅读 · 0 评论 -
面试题
多个atomic类连续调用能否构成原子性? public class Demo { AtomicInteger count = new AtomicInteger(0); //比如count加到999了,这时候一个线程拿到count判断,虽然.get方法保证原子性,但是他阻止 //不了其它线程也来判断,所以第一个线程还没加完,第二个线程也进来了,这时候两个线程都给cou...原创 2020-01-07 21:20:22 · 224 阅读 · 0 评论 -
volatile
volatile 关键字,使一个变量在多个线程间可见 mian,t1线程都用到一个变量,java默认是T1线程中保留一份副本,这样如果main线程修改了该变量, t1线程未必知道 使用volatile关键字,会让所有线程都会读到变量的修改值 volatile不能保证原子性举例 比如说第一个线程加到100了,还没往上加,另外一个线程来了,把100拿过来执行方法, 然后第一个线程继续加到101,...原创 2020-01-07 20:25:12 · 117 阅读 · 0 评论 -
interrupt()
interrupt() 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行 isInterrupted() 用来判断当前线程的中断状态(true or false) interrupted() 判断当前线程是否被中断,如果被中断的话,返回true,并清除中断状态,第二次调用的话中断状态已经被清除,将返...原创 2020-01-07 19:56:15 · 392 阅读 · 0 评论 -
synchronized
文章目录0.synchronized关键字1. 锁定的对象为类的实例举例2.锁定的对象为类的.class文件3.锁对象的改变4.不要以字符串常量作为锁定的对象5.锁的粒度6.线程重入7.同步方法和非同步方法是否可以同时调用8.脏读问题9.一个同步方法调用另外一个同步方法,能否得到锁10.重入锁的另外一种情况,继承 0.synchronized关键字 synchronized关键字锁定的是对象不是...原创 2020-01-07 15:34:03 · 125 阅读 · 0 评论 -
证明偏向锁和重量级锁的存在
synchronized 在jdk1.6之前,实现的重量级锁,所谓重量级锁,存在线程的互斥,通过os函数来实现的锁。 &esmp;在jdk1.6之后,实现的是偏向锁,所谓偏向锁,要求线程不一定互斥,所以偏向锁是synchronized锁的对象如果没有资源竞争的情况下存在的。偏向锁不会调用os函数实现(这里,第一次会调用,之后就不会再调用了)。 思路: 在java线程的方法中打印出在...原创 2020-01-06 21:29:05 · 193 阅读 · 0 评论