并发程序
文章平均质量分 77
欣淡定
step by step forward
展开
-
多线程处理同一任务
在工作中,我们可能会面临一个比较费时的任务处理。比如给10万个手机号码发送短信,如果使用单线程的话是很费时的,如果一个手机号码短信的发送操作需要1s,那么大概需要1天。如果使用10个线程一起发送,那么只需要0.1天左右。那么怎么判断这10个线程都将短信发送完成了呢?一下分享目前所了解到的几个方法。 1)通过数组处理public class ThreadHandleDemo { //假设有五个线程 private static volatile boo...原创 2021-07-13 09:20:56 · 1800 阅读 · 0 评论 -
java多线程之 Fork/Join框架
如果我们需要处理一大批数据,但是没有处理这批数据的能力,就可以使用分而治之的方式.fork/join框架就是对这种方式的体现.ForkJoinTask 接口的实现类: RecursiveTask 有返回值 RecursiveAction 无返回值demo:import java.util.ArrayList;import java.util.List;import...原创 2020-01-10 14:18:14 · 179 阅读 · 0 评论 -
ThreadPoolExecutor 堆栈信息打印
在多线程中,一个线程抛出异常有时不是自己想要的,或者得不到想要的信息.比如想知道线程在什么时候提交的;此时可以自定义线程池,加入自定义的堆栈信息demo:import java.util.concurrent.*;/** * 加入自定义的堆栈信息 */public class TestThreadPoolExecutor01 extends ThreadPoolExecu...原创 2020-01-09 10:31:52 · 716 阅读 · 0 评论 -
线程池内部实现
之前已经介绍过newFixedThreadPool,newCachedThreadPool,newSingleThreadScheduledExecutor等线程池;这些线程池底层都是用了ThreadPoolExecutor实现.比如public static ExecutorService newFixedThreadPool(int nThreads){ return new ...原创 2020-01-08 11:14:44 · 225 阅读 · 0 评论 -
java底层线程池介绍和使用
Executor:顶层接口Executors: 线程池工厂类主要的线程池介绍: newFixedThreadPool:存在固定的线程个数,任务提交后,如果线程池有空闲的线程,那么空闲线程会处理任务; 如果线程池中没有空闲的线程,那任务会存放在任务队列中;一旦有空闲线程,就会处理任务队列中的任务 newCachedThreadPool:线程没有固定,...原创 2020-01-07 13:42:25 · 113 阅读 · 0 评论 -
阻塞工具类LockSupport的运用
LockSupport:阻塞工具类,有park(),unpark(线程)等方法和wait(),notify()方法相比,LockSupport不需要获取对象的锁和suspend(),resume()方法相比,LockSupport的unpark()可以在park()方法之前执行, 避免了resume()先于suspend()方法执行造成无限挂起的问题,并且使用suspend()线...原创 2020-01-07 11:30:02 · 131 阅读 · 0 评论 -
信号量Semaphore,读写锁ReadWriteLock,计数器CountDownLatch,循环栅栏CyclicBarrier运用
1.信号量Semaphore: 像synchronized, ReentrantLock等这些对临界区资源进行同步后,所有对临界区资源进行访问的线程都得串行排队,而信号量允许指定的线程数同时进行访问demo:import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import ...原创 2020-01-06 15:24:00 · 501 阅读 · 0 评论 -
重入锁之公平锁
像synchronized关键字控制这样的锁是非公平的,因为系统只会从这个锁的等待队列中随机选择一个。而公平锁的特点就是按照时间先后顺序或许锁执行。Demo如下:import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * 公平锁: 对同一个临界...原创 2020-01-04 23:39:36 · 139 阅读 · 0 评论 -
Condition实现生产者消费者小demo
如果说重入锁ReentrantLock的lock()与unlock()方法的作用和synchronized的作用类似,那么Condition的await(),signal(),signalAll()作用就是和Object.await(),Object.notify(),Object.notifyAll()类似:import java.util.concurrent.locks.Conditi...原创 2020-01-04 23:27:11 · 530 阅读 · 0 评论 -
重入锁预防死锁的两种方式
重入锁ReentrantLock类似于synchronized,都可以让多个线程对临界区资源的访问进行控制,但重入锁需要手动释放锁,正是这样,重入锁更加的灵活;介绍重入锁防死锁的两种方式:1.中断响应 lockInterruptibly():import java.util.concurrent.locks.ReentrantLock;/** * lockInterruptibl...原创 2020-01-04 17:50:17 · 520 阅读 · 2 评论