JUC
鹿克阿特米
这个作者很懒,什么都没留下…
展开
-
请谈谈你对volatile的理解
volatile是java虚拟机提供的轻量级的同步机制,三个特性:保证可见性不保证原子性禁止指令重排它会强制从公共栈中取得变量的值,而不是从线程私有数据栈中取得变量的值只能修饰变量volatile不支持原子性:对于volatile修饰的变量,JVM虚拟机只是保证从主内存加载到线程工作内存的值是最新的。在加载后这个值可能被其他线程改了,这时线程工作内存的值已经加载,不会变化了,...原创 2019-09-08 01:06:38 · 322 阅读 · 0 评论 -
线程池用过吗?生产上你如何设置合理参数
线程池的拒绝策略你谈谈:是什么:等待队列满了,线程池中的max线程也达到了,这时候我们就需要拒绝策略机制合理的处理这个问题。JDK自带的拒绝策略:AbortPolicy(默认):直接抛出RejectedExecutionException异常组织系统正常运行CallerRunsPolicy:即不会抛弃任务,也不会抛出异常,而是将某些任务回退到调用者,从而降低新任务流量DiscardOl...原创 2019-09-09 17:58:34 · 802 阅读 · 0 评论 -
阻塞队列知道吗
阻塞队列有没有好的一面不得不阻塞,你如何管理阻塞队列首先是一个队列,当阻塞队列是空的时候,从队列中获取元素的操作将被阻塞,当队列是满的时候,往队列里添加元素的操作会被阻塞。为什么需要阻塞队列(BlockingQueue):好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQueue都一手包办了。用在哪里:生产者消费者模式:传统版:...原创 2019-09-09 16:32:23 · 150 阅读 · 0 评论 -
线程池用过吗?ThreadPoolExecutor谈谈你的理解
第三种获得多线程的方法:Callable 接口如何使用Callable创建一个线程: 通过FutureTask的构造方法原创 2019-09-09 16:31:32 · 279 阅读 · 0 评论 -
synchronized和lock的区别
sychronizedlock原始构成是关键字,属于jvm层面是具体类java.util.concurrent,locks.lock,是api层面的锁使用方法不需要用户手动去释放锁,当同步代码执行完后系统会自动让线程释放对锁的占用需要用户去手动释放锁,若没有主动释放锁,就有可能导致出现死锁现象。需要lock和unlock配合try/finally语句块来完成...原创 2019-09-09 10:11:41 · 94 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier、Semaphore 使用过吗
java.util.concurrent.CountDownLatch实现一个倒计数器,参与倒计数的线程运行到await的地方停止,要等到计数为0时才能继续运行CountDownLatch(int count) //实例化一个倒计数器,count指定计数个数countDown() // 计数减一await() //等待,当计数减到0时,所有线程并行执行public static voi...原创 2019-09-08 21:59:23 · 156 阅读 · 0 评论 -
公平锁、非公平锁、可重入锁、递归锁、自旋锁 谈谈你的理解?请手写一个自旋锁
1原创 2019-09-08 17:58:58 · 274 阅读 · 0 评论 -
我们知道ArrayList是先线程不安全的,请编码写一个不安全的案例并给出解决方案
public static void main(String[] args) { List<String> list = new ArrayList(); for (int i = 0; i < 30; i++) { new Thread(() -> { list.add(UUID.randomUUID().toSt...原创 2019-09-08 15:08:12 · 492 阅读 · 0 评论 -
CAS 你知道吗
CAS 你知道吗:compare and swap 比较并交换比较当前工作内存中的值和主内存的值,如果相同则执行规定操作,否则继续比较直到主内存和工作内存中的值一致为止。他是一条CPU并发原语,它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在JAVA中就是sun,misc.Unsafe类中的各个方法,调用Unsafe类的CAS方法,...原创 2019-09-08 13:57:13 · 249 阅读 · 0 评论 -
死锁编码及定位分析
死锁 是两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待现象,若无外力干涉那他们都将无法推进下去。产生原因:系统资源不足资源分配不当…解决:jps命令定位进程号jstack找到死锁查看C:\Program Files\Java\jdk1.8.0_181\bin\jps.exeC:\Program Files\Java\jdk1.8.0_181\bin\jstack...原创 2019-09-09 18:40:31 · 208 阅读 · 0 评论