我们来看一下JDK1.6中java.util.concurrent.Executors使用的DefaultThreadFactory: /*** The default thread factory*/static class DefaultThreadFactory implements ThreadFactory {static final AtomicInteger poolNumber new AtomicInteger(1);final ThreadGr…
直接断点进去:
Test
public void testKeepAliveTime3() {//生存时间 - 针对救急线程ThreadPoolExecutor executor new ThreadPoolExecutor(1, 2, 10, TimeUnit.SECONDS, new SynchronousQueue<>());
}public ThreadPoolExecutor(int corePoolSize,int maxim…
1 Threadpool模块详解
原文地址:https://chrisarndt.de/projects/threadpool/ Title: Easy to use object-oriented thread pool framework Author: Christopher Arndt Version: 1.3.2 Date: 2015-11-29 License: MIT License 警告: 本模块已经被废弃&#…
简单说明线程不安全是什么情况: package com.zhang.test.thread;public class Test1 implements Runnable{private static Test1 test1 new Test1();static int i 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread…
自定义线程池
class ThreadPoolTest{public static void main(String[] args){RejectPolicy<Runnable> rejectPolicy BlockingQueue::put;MyThreadPool pool new MyThreadPool(3, 1000, TimeUnit.MILLISECONDS, 4, rejectPolicy);for (int i 0; i < 30; i) {int j…
1、使用Thread.join()方法 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B public class ThreadTest1 {public static…
目录
一、ctl介绍
二、线程池ctl源码
三、线程池ctl分析
1、private static int ctlOf(int rs, int wc) { return rs | wc; }
2、private final AtomicInteger ctl new AtomicInteger(ctlOf(RUNNING, 0));
3、private static int runStateOf(int c) { return c &am…
原创地址:http://blog.chinaunix.net/uid-25073805-id-3046000.html 分类: LINUX 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性&#…
多线程进阶目录 1.锁策略1.1 悲观锁 vs 乐观锁1.2 读写锁 vs 互斥锁1.3 重量级锁 vs 轻量级锁1.4 挂起等待锁 vs 自旋锁1.5 公平锁 vs 非公平锁1.6 可重入锁 vs 不可重入锁 2. Java中的synchronized锁2.1 synchronized的归类2.2 synchronized的特点(JDK8)…
1.同步(Synchronous) VS 异步(Asynchronous)
所谓同步,可以理解为每当系统执行完一段代码或者函数后,系统将一直等待该段代码或函数返回的值或消息,直到系统接收到返回的值或消息后才继续往下执行下一段代码或者函数,在等待返回值…
三.使用示例 前面我们讨论了关于线程池的实现原理,这一节我们来看一下它的具体使用:
public class Test {public static void main(String[] args) { ThreadPoolExecutor executor new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,new Ar…