随笔分类 - 并发编程
摘要:ForkJoin框架是Java并发包(java.util.concurrent)的一部分,主要用于并行计算,特别适合处理可以递归划分成许多子任务的问题,例如大数据处理、并行排序等。该框架的核心思想是将一个大任务拆分成多个小任务(Fork),然后将这些小任务的结果汇总起来(Join),从而达到并行处理
阅读全文
摘要:一、线程池综述 它的主要特点为:线程复用;控制最大并发数;管理线程。 使用线程池的好处有 1、降低资源消耗。通过重复利用已创建的线程,降低线程创建和销毁带来的资源消耗 2、提高响应速度。当任务到达时,任务可以不需要等到线程创建好就可以立即执行。 3、提高线程的可管理性。线程是稀缺资源,如果无限制创建
阅读全文
摘要:死锁是指两个或者两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那么它们都将无法推进下去 模拟死锁 class HoldLockThread extends Thread { private String lockA; private String lockB; pub
阅读全文
摘要:可重入锁又名递归锁 是指同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提:锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。 Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。 synchroni
阅读全文
摘要:1、使用“多线程&锁”模拟生产者和消费者 class ShareData { private int number = 0; private Lock lock = new ReentrantLock(); private Condition condition = lock.newConditio
阅读全文
摘要:盘点一下Java中创建线程的几种方式 一、继承Thread类,重写run()方法 public class MyThread extends Thread { @Override public void run() { System.out.println("my thread start " +
阅读全文
摘要:记住这3条:“读锁-读锁可以共存,读锁-写锁不可共存,写锁-写锁不可共存”。 用多线程来展示读锁和写锁的使用 public class ReadWriteLockDemo { private static volatile Map<Integer, Object> map = new Concurr
阅读全文
摘要:semaphore信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制。 使用semaphore模拟6辆车墙3个车位,每辆车抢到车位后随机停留5到10秒钟 public class SemaphoreDemo { public static void main(Str
阅读全文
摘要:public class SpinLockDemo { //原子引用线程 AtomicReference<Thread> atomicReference = new AtomicReference<>(); public void myLock() { Thread thread = Thread.
阅读全文
摘要:CountDownLatch CountDownLatch通过计数器来实现,计数器表示线程的数量。每当一个线程执行结束后,计数器的值就会减1,并在await方法处阻塞。一旦计数器为0,所有阻塞的线程均被释放,await方法后所有后续动作都会开始执行。计数器无法被重置。 模拟等班级的5位同学都离开教室
阅读全文