concurrent
Code神之手
人生辗转,起伏无常。活在当下。
1.01的365次方=37.78343433289>1;
0.99的365次方= 0.02551796445229<1
展开
-
多线程之子线程死循环里加休眠或者加打印,会跳出死循环?问题记录待解决
问题描述: 子线程死循环里加休眠,会跳出死循环,执行while后面的语句? 子线程死循环里加打印,会跳出死循环,执行while后面的语句? 问题代码:package com.demo;import java.util.concurrent.TimeUnit;/** * @Description * @Author by mocar小师兄 * @Da...原创 2020-03-13 18:09:31 · 1228 阅读 · 2 评论 -
多线程之volatile关键字的使用
volatile一般被用于修饰共享资源,如果当前线程修改了volatile修饰的共享资源,则其他线程立马可见一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 禁止进行指令重排序。看一个栗子加强理解:package com...原创 2020-03-13 17:48:56 · 121 阅读 · 0 评论 -
多线程之LockSupper线程阻塞工具类
LockSupper介绍:所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。源码:LockSupper不能被实例化!主要有两类方法:park 和 unpark。为什么叫park呢,park英文意思为停车。我们如果把Thread看成一辆车的话,park就是让车停下,unpark就是让车启动然后跑起来。调用了park方法后当前线程被阻塞...原创 2020-03-13 15:44:34 · 339 阅读 · 0 评论 -
多线程之SimpleFormatDate线程不安全的正确解决方案
package com.demo;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/**...原创 2020-03-13 14:23:46 · 253 阅读 · 0 评论 -
多线程之Thread.start和Thread.join
Thread.start;//是开启线程Thread.join;//邀请A线程先执行,本线程先暂停执行,等待(可设置等待时间)A线程执行完后,主线程再接着往下执行自我理解:当Thread.join后,即这个子线程会获得执行权,主线程会等这个子线程执行完再执行(如果join设置了时间,超过时间还没有执行完,主线程就不会再等了,主线程会继续执行)直白话:一个女的和男朋友一起约...原创 2020-03-13 11:52:25 · 2465 阅读 · 0 评论 -
多线程之Timer定时器实现用户线程和守护线程
Timer即定时器,他的构造方法如下:public Timer();public Timer(boolean isDaemon);//是否守护线程public Timer(String name);public Timer(String name, boolean isDaemon);定时器调度执行任务的方法,如下://常用的public void sche...原创 2020-03-13 10:00:57 · 745 阅读 · 0 评论 -
多线程之用户线程和守护线程
启动用户线程的两种方式:方式1:new Threadextends Thread并重写run方法.start或者直接new Thread({重写run方法}).start方式1:implements Runnable private static class TaskThread implements Runnable{ 重写run{}}new Thread...原创 2020-03-12 18:05:54 · 180 阅读 · 0 评论 -
concurrent之初识CyclicBarrier和实践案例
介绍:CyclicBarrier:循环栅栏 (个人理解:多线程完成任务后汇报情况的地方)cycilc:循环的意思barrier:障碍描述CyclicBarrier的栗子:生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBarrier。构...原创 2020-03-12 17:08:07 · 261 阅读 · 0 评论 -
concurrent之CountDownLatch使用场景
CountDownLatch应用场景:应用程序启动类完成启动之前,检查确保所有N个外部服务类都已经启动和运行了测试代码:外部服务类BaseHealthCheckerpackage com.geek.countdownlatchgo.example.service.verifier;import java.util.concurrent.CountDownLatch...原创 2020-03-12 15:35:21 · 184 阅读 · 0 评论 -
concurrent之初识CountDownLatch(计数器),多线程并行处理
CountDownLatch:是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行详细介绍参考:https://blog.csdn.net/qq812908087/article/details/81112188用法:声明计数器以及计数CountDownLatch countDownLatch = new CountDownLatch(1);...原创 2020-03-12 14:50:44 · 375 阅读 · 0 评论 -
concurrent之多线程await 和wait 释放锁疑惑
线程执行到condition.await();线程处于等待状态,那么锁是否会释放?测试代码:package com.demo;import com.sun.org.apache.bcel.internal.generic.NEW;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomi...原创 2020-03-12 10:06:28 · 783 阅读 · 0 评论 -
concurrent之synchronized和ReentrantLock初识两种独占锁
前言java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能。而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。synchronized和ReentrantLock对比synchronized是独占锁,加锁和解锁的过程自动进行,易于操作,但不够灵活。Reentrant...原创 2020-03-11 17:58:46 · 370 阅读 · 0 评论 -
concurrent之synchronized和CAS、独占锁和乐观锁笔记
synchronized 独占锁通常synchronized关键字用于代码块或者方法上,任何对象都是一把锁,即object,synchronized就是一种独占锁。在多线程背景下,多线程竞争同一资源,使用synchronized可以解决资源冲突问题。但是,缺点如下:加锁会导致一下问题:加多线程竞争下,加锁和释放锁会导致较多的上下文切换,引起性能问题。 多线程可以导致死锁的问...原创 2020-03-11 12:09:26 · 341 阅读 · 0 评论 -
concurrent之线程池选择队列LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue
SynchronousQueue:SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者,必须等队列中的添加元素被消费后才能继续添加新的元素。拥有公平(FIFO)和非公平(LIFO)策略使用SynchronousQueue阻塞队列一般要求maximumPoolSizes为无界,避免线程拒绝执行操作。 private E...原创 2020-03-11 11:34:28 · 185 阅读 · 0 评论 -
concurrent之BlockingQueue、LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue
参考:https://www.jianshu.com/p/7b2f1fa616c6原创 2020-03-10 18:07:36 · 220 阅读 · 0 评论 -
高并发、高性能、高可用认识
场景:双11,双12为什么能支持全国14亿人口同时购物下单?一. 高并发高并发是现在互联网分布式框架设计必须要考虑的因素之一,它是可以保证系统能被同时并行处理很多请求,对于高并发来说,它的指标有:响应时间:系统对进来的请求反应的时间,比如你打开一个页面需要1秒,那么这1秒就是响应时间。吞吐量:吞吐量是指每秒能处理多少请求数量,好比你吃饭,每秒能吃下多少颗米饭。秒查询率:秒查询率是...原创 2020-03-09 15:05:34 · 920 阅读 · 0 评论 -
concurrent之多线程下使用AtomicInteger、AtomicIntegerArray等的原子性
参考:https://blog.csdn.net/sunxianghuang/article/details/52277370原创 2020-03-10 17:26:31 · 270 阅读 · 0 评论 -
concurrent之初识AtomicIntegerArray用法
package com.demo;import java.util.concurrent.atomic.AtomicIntegerArray;/** * @Description * @Author by mocar小师兄 * @Date 2020/3/10 16:34 **/public class AtomicIntegerArrayTest { public s...原创 2020-03-10 16:44:10 · 237 阅读 · 0 评论 -
concurrent之线程池executorService和forkJoin用法
executorService:线程池根据cpu核数设置线程池线程个数,编写任务类代码如下:package com.demo;import java.util.ArrayList;import java.util.concurrent.*;import java.util.stream.LongStream;/** * @Description * @Author b...原创 2020-03-10 16:09:27 · 467 阅读 · 0 评论 -
concurrent之ForkJoin初识笔记
需要先认识 RecursiveTaskRecursiveTask:递归任务描述:有一个fork类来把大任务分割成子任务,有可能子任务还是很大,所以还需要不停的分割,直到分割出的子任务足够小。Fork/Join框架要完成两件事情: 1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割 2.执行任务并合并结...原创 2020-03-10 11:24:41 · 243 阅读 · 0 评论