首页 > 学院 > 开发设计 > 正文

多线程精要

2019-11-14 10:39:13
字体:
来源:转载
供稿:网友

目录

中断

线程池

=====

======

======

======

======

======

======

======

======

======

中断

中断是通过调用Thread.interrupt()方法来做的. 这个方法通过修改了被调用线程的中断状态来告知那个线程, 说它被中断了. 对于非阻塞中的线程, 只是改变了中断状态, 即Thread.isInterrupted()将返回true; 对于可取消的阻塞状态中的线程, 比如等待在这些函数上的线程, Thread.sleep(), Object.wait(), Thread.join(), 这个线程收到中断信号后, 会抛出InterruptedException, 同时会把中断状态置回为false.调用该方法结束之后, 中断状态会变成false

参考1

线程池

在一些场景中,也需要要设置一个不同的最小线程数。比如当一个系统最大需要同时处理2000个任务,而平均任务数量只是20个情况下,就需要将最小线程数设置成20,而不是等于其最大线程数2000。此时如果还是将最小线程数设置的等于最大线程数的话,那么闲置线程(Idle Thread)占用的资源就比较可观了,尤其是当使用了ThreadLocal类型的变量时,会在每个线程的context中存储该变量的副本。

ReentrantLock是通过内部的Sync变量实现其锁机制(分为公平和非公平,都是继承自AbstractQueuedSynchronizer),AbstractQueuedSynchronizer提供了状态位+队列的机制实现了锁机制


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表