并发编程(十三)定时任务线程池使用与原理


ScheduledThreadPoolExecutor使用intinitialDelay=5;System.out.println(Thread.currentThread().getName()+""+TimeUnit.MILLISECONDS.toSeconds(System

并发编程(十二)ForkJoin框架使用


所用较少,就不再分析太多了ForkJoin框架使用publicclassLongSumextendsRecursiveTask<Long>{staticfinalintSEQUENTIAL_THRESHOLD=1000;intlow;inthigh;int[]array;LongSum(

并发编程(十一)自定义线程池


线程池核心要点包装任务:将任务转移给自己创建的线程中执行阻塞队列:将无法立即处理的任务放入阻塞队列,等待空闲线程执行代码实现publicclassMyThreadPoolExecutorimplementsExecutor{privateAtomicIntegernumber=newAtomicIn

并发编程(十)线程池核心原理与源码剖析


线程池的状态RUNNING:能够接收新任务,以及对新加的任务进行任务,创建线程池的默认状态。SHUTDOWN:不在接收新任务,会继续处理完正在处理的任务和阻塞队列中的任务,调用shutdown()更改状态。STOP:不在接收新任务,不在处理阻塞队列中的任务,并中断线程池中正在处理的任务,调用shut

并发编程(九)Queue


写时复制ListCopyOnWriteArrayListpublicclassCopyOnWriteArrayListTest{publicstaticvoidmain(String[]args)throwsInterruptedException{List<Integer>list=n

并发编程(八)Unsafe&Atomic


Unsafe通过反射获取UnsafepublicclassUnsafeInstance{publicstaticUnsafereflectGetUnsafe(){try{Fieldfield=Unsafe.class.getDeclaredField("theUnsafe");f

并发编程(七)Tool


SemaphoreSemaphore字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目。获取释放资源详细流程简单使用构造方法publicSemaphore(intpermits)publicSemaphore(intpermits,booleanfair)permits:可用的初始许可证数

并发编程(六)ReentrantLock


Java并发编程核心在于java.concurrent.util包而juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQS,AQS定义了一套多线程访问共享资源的同步器框

并发编程(五)synchronized


并发安全问题多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问,实际上,

并发编程(四)volatile关键字


volatile原理与内存语义volatile是JVM提供的轻量级的同步机制volatile语义有以下两个作用:可见性:保证被volatile修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。有序性:禁止指令重排。vol