线程池学习

  • Java线程池相关类

Java线程池相关类

Executor
定义了最常见的线程池接口,execute(Runnable command)

public interface Executor {
    void execute(Runnable command);
}

ExecutorService
线程池接口类。

ThreadPoolEexcutor
最为常用的线程池。

/**
 * corePoolSize : 活跃线程数
 * maximumPoolSize : 线程总数
 * keepAliveTime,unit : 非活跃线程在keepAliveTime个unit之后会被回收
 * workQueue : 工作队列
 */
public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {}

Executors
工厂类,利用工厂方法可以生产成各种各样的线程池,生产出各种参数的ThreadPoolExecutor,比如newFixedThreadPool(int nThreads):

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }
  • ThreadPoolExecutor

  1. 当线程池执行一个runnable时,它会先去检查线程池里的线程数是否小于corePool的定义的线程数,如果小于它,不管这些线程是否空闲,都会不断创建新线程,直到线程池里的线程数等于corePool。
  2. 当线程池的线程数已经等于corePool,如果还有新任务,但是线程池里面有空闲线程,那么会用这些空闲线程执行这些任务。
  3. 如果线程池里面已经没有空闲线程了,会把任务放到工作队列里面;当有线程闲下来的时候,会从工作队列里面取任务下来执行。
  4. 当没有空闲线程,并且工作队列也已经满了。这时会从创建新线程来执行这些任务,直到线程池的线程数等于maximumPool
  5. 如果工作的线程数已经达到maximumPoolSize,并且工作队列也已经被塞满了,这时如果还来新任务的话就会报异常。
  6. 当线程不再执行任务的时候,过了keepAliveTime,如果线程池总数大于corePoolSize,就会被回收,直到线程池的总数等于corePoolSize。

假设corePool = 3, maximumPool = 6, 工作队列大小为10个,假设这些线程都需要足够的时间才能执行完毕,当加入20个任务的时候,线程执行顺序应该是这样子的:先执行1-3,然后把4-13放到工作队列里面,然后再执行14-16,任务17-20会抛出异常。

  • Callable和Future

Callable 和 Runnable都可以作为线程的执行任务,只是Callable有返回值,而Runnable没有返回值;Callable的返回值可以用Future来接收,然后用get()来使用。比如:

        ExecutorService pool = Executors.newFixedThreadPool(10);
        Future<String> future = pool.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return Thread.currentThread().getName();
            }
        });
        System.out.println(future.get());

future.get()会使线程阻塞,一直到call执行完。

FutureTask

        ExecutorService pool = Executors.newFixedThreadPool(10);
        FutureTask futureTask = new FutureTask(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return Thread.currentThread().getName();
            }
        });
        pool.submit(futureTask);
        //用普通线程的方式
        new Thread(futureTask).start();
        
        if(futureTask.isDone()){
            System.out.println(futureTask.get());
        }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 11,235评论 4 56
  • 一、战国时代的形势 春秋战国时代是一个英雄辈出的传奇时代,提到战国,就不能不提春秋。周朝封邦建国,以宗法制为...
    fb02e35a0b32阅读 765评论 16 23
  • 椿:有的鱼是永远都关不住的,因为他们属于天空。别人的理解与不理解又有什么关系?因为我知道我要去的,是天空…… 我们...
    琅嬛菊菊阅读 367评论 0 0
  • 心者,五脏六腑之主也,忧愁则心动,心动则五脏六腑皆摇。 ——黄帝内经 中医的最高境界是养生 养生的最高境界是养心 ...
    惬意永不放弃阅读 208评论 0 0
  • 自古多情空余恨, 乱世桃花逐水流, 落花有意随流水, 流水无心恋落花。 花谢花开花满天, 红消香断有谁怜? 一世繁...
    素颜之爱情独角戏阅读 342评论 0 0