Java并发
文章平均质量分 72
阿振_
这个作者很懒,什么都没留下…
展开
-
Thread类中的一些方法
1.yield: 让步,表示当前线程愿意让出CPU资源给其他线程。而这种让步,不是绝对的,有可能执行了yield方法后,当前线程并没有真正让出CPU资源。/*** A hint to the scheduler that the current thread is willing to yield* its current use of a processor. The sched原创 2018-01-30 09:21:41 · 894 阅读 · 0 评论 -
ThreadPoolExecutor的clt:runState&workCount
ctl: ThreadPoolExecutor用一个AtomicInteger来存储线程池工作状态和工作线程数量。ctl二进制的高三位用来保存线程池工作状态,其余用来保存工作线程数量。private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); // 初始值:状态RUNNINT,工作线程数量:0privat原创 2018-02-01 16:52:20 · 1050 阅读 · 0 评论 -
ThreadPoolExecutor任务调度策略
execute: execute方法时暴露给开发者提交任务的方法,这个方法就是整个线程池的入口。当然还有submit类方法,实际上也是调用了execute方法。public void execute(Runnable command) { if (command == null) throw new NullPointerException(); i原创 2018-02-01 15:53:47 · 564 阅读 · 0 评论 -
ThreadPoolExecutor参数以及Executors工厂方法
int corePoolSize: 能够长时间保持在线程池中的线程数量,就是说如果线程池中线程数量不超过corePoolSize时,即使当前没有任务需要执行,这些线程依然保持运行,等待任务到来。int maximumPoolSize: 池中线程最大数量,如果当前任务超出了maximumPoolSize,就需要用阻塞队列暂时保存起来,等待池中线程有空闲了再执行原创 2018-02-01 14:47:38 · 359 阅读 · 0 评论 -
ExecutorService的几个方法
public interface Executor { void execute(Runnable command);}public interface ExecutorService extends Executor { void shutdown(); // 已经提交的任务继续执行,不接受新的任务提交 List shutdownNow(); // 尝试终止正在执原创 2018-02-01 14:40:38 · 2566 阅读 · 0 评论 -
几个concurrent构件
CountDownLatch:/** * CountDownLatch:每次执行countDown方法,count减1,直到count为0, * 所有在CountDownLatch上await的线程都将结束await继续运行 * * 一个或多个线程到达await等待,直到count为0,这些线程就可以继续运行 * * await:等待count==0 * countDown:co原创 2018-01-31 20:06:06 · 145 阅读 · 0 评论 -
原子类:AtomicInteger
在多线程中,像i++这样的操作时非原子性操作,包括读-修改-写三个步骤。这将导致多线程环境中的i++操作线程不安全。Java提供了多个原子类来实现变量的原子增减操作。这些类底层依赖于自旋的CAS(CompareAndSwap)操作。AtomicInteger: 其内部保存了一份volatile的int类型变量,保证了值的可见性。public final int get()原创 2018-01-30 20:53:39 · 205 阅读 · 0 评论 -
线程本地变量:ThreadLocal
ThreadLocal类提供了线程本地变量访问的公共接口,每个线程通过ThreadLocal访问存储在线程本地的变量。当某个线程调用ThreadLocal的get或set方法时,ThreadLocal根据调用线程来获取或设置该线程的本地变量。这个变量存储在一个ThreadLocalMap的哈希表中,key为ThreadLocal对象,代表特定的变量,value就是本地变量值。因为每个线程只能访问自原创 2018-01-30 20:38:35 · 349 阅读 · 0 评论 -
volatile关键字
Java中的volatile关键字能够保证每次对变量的读操作直接从主存中读取,而非从Cache中读取;每次写操作都立即将Cache中数据同步到主存。 在多线程环境中多个线程同时访问同一个非volatile变量,并且没有使用锁同步控制,那么运行在不同CPU上的多个线程都会从主存中读取一份变量的副本到Cache中,进而对Cache中的数据进行操作。不同线程中的操作对于彼此来说是不完全可见的原创 2018-01-30 15:13:33 · 144 阅读 · 0 评论