Java
ph3636
这个作者很懒,什么都没留下…
展开
-
Java线程池任务处理以及异常恢复
一、任务处理: 当在线程池中执行任务时,如何记录任务的开始结束时间?如何记录异常日志?如何对任务进行一些自定义处理? 针对上面的问题,我们可以采用直接在任务中编码的形式,也可以利用ThreadPoolExecutor的模版方法进行实现,其实在使用线程池时,都需要重新构造线程池类,配置对应的参数,这样才能使它发挥应有的效果。 如下图(1146行,1157行),线程池有任务前置后置方法,关于任务的一些处理可以通过这两个方法进行实现,首先就需要继承ThreadPoolExecutor...原创 2021-03-09 16:13:49 · 1044 阅读 · 0 评论 -
Java源码分析之ThreadPoolExecutor(下)
线程执行任务,释放状态锁,允许中断,获取任务并加锁执行,判断线程池状态是否至少是STOP,说明线程池快要关闭,如果本线程没有被中断话就执行中断方法,然后执行任务前置处理方法,处理线程具体的任务,如果有异常的话抛出对应的异常,最后执行任务后置处理方法,释放本次任务,增加完成任务的数量,释放状态锁,继续下一次获取任务。 public void run() { runWorker(this...原创 2019-07-26 19:52:59 · 140 阅读 · 0 评论 -
Java源码分析之ThreadPoolExecutor(上)
创建线程池需要核心线程数,大于等于零即可,最大线程数,必须要大于零并且要大于等于核心线程数,线程存活时间以及时间单位,阻塞队列,线程工厂,拒绝策略。 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...原创 2019-07-26 19:49:50 · 89 阅读 · 0 评论 -
Java源码分析之AbstractQueuedSynchronizer
作为并发工具的父类,自身维护一个节点队列,以及状态值,子类实现四个尝试方法,父类处理尝试失败后的获取操作 private transient volatile Node head; private transient volatile Node tail; private volatile int state; Node(Thread thread, Node mode) { //...原创 2019-07-26 19:47:19 · 109 阅读 · 1 评论 -
Java系列之CyclicBarrier
1. CyclicBarrier类似可重复使用的CountDownLatch,可以允许多个线程执行完后才可以执行某一操作,并且可以循环使用。第一个变量是允许线程数,第二个是所有线程执行完后最后需要执行的任务,线程执行时只会递减count值,循环使用时复原状态需要用parties重新设置count值。 public CyclicBarrier(int parties, Runnable barr...原创 2018-12-12 12:36:15 · 106 阅读 · 0 评论 -
Java系列之ReentrantReadWriteLock
1. ReentrantReadWriteLock可重入读写分离锁 public ReentrantReadWriteLock() { this(false); } public ReentrantReadWriteLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync()...原创 2018-12-11 20:23:26 · 273 阅读 · 0 评论 -
Java系列之ReentrantLock
1. ReentrantLock可重入锁分为公平和非公平锁,通过构造函数进行设置,有时会用它来替代synchronized,区别在于前者能实现顺序公平,实现方式通过原子cas操作即cpu原语实现,而后者是通过字节码monitor-enter以及monitor-exit实现, public ReentrantLock() { sync = new NonfairSync(); ...原创 2018-12-11 12:05:21 · 125 阅读 · 2 评论 -
Java系列之CountDownLatch
1. CountDownLatch代表多个操作都执行完时整个程序才可以继续向下执行。数量可以设置 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count);...原创 2018-12-10 20:59:09 · 416 阅读 · 0 评论 -
Java系列之Semaphore
1. Semaphore用来控制同时允许的操作的令牌数量,分为公平和非公平,核心类Sync继承AbstractQueuedSynchronizer public Semaphore(int permits) { sync = new NonfairSync(permits); } 2. 尝试获取令牌,数量可以自己设置,这个对于两种Sync都是一样的操作。 publ...原创 2018-12-10 19:46:17 · 231 阅读 · 0 评论 -
Java系列之ServiceLoader
1. ServiceLoader主要用于实现Java的SPI功能,从类加载器中加载jar包下的符合实现该接口的实现类。 2. 使用时一般使用下列方式,ServiceLoader实现了Iterable接口,可以进行遍历取值 public static <S> ServiceLoader<S> load(Class<S> service, ...原创 2018-12-06 12:06:23 · 383 阅读 · 0 评论