摘要:
一、使线程进入等待状态和唤醒状态的三种方法 1、使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程,需配合synchronized关键字使用 2、使用JUC包中的Condition的await()方法让线程等待,使用signal()方法唤醒线程 3、Lo 阅读全文
摘要:
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 阅读全文
摘要:
开启3个线程,依次交替打印ABC,打印5轮 一、使用Lock+Condition来实现 public class ThreadABC { private volatile int number = 1; private Lock lock = new ReentrantLock(); private 阅读全文
摘要:
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 " + 阅读全文
摘要:
比如要更新业务jar包gank-api-0.0.1-SNAPSHOT.jar中依赖的fastjson的版本,从1.2.72升级到1.2.83,按如下步骤进行: 1.在当前目录D:\tm下解压业务服务jar包 jar -xvf gank-api-0.0.1-SNAPSHOT.jar 2.在解压后的ME 阅读全文
摘要:
记住这3条:“读锁-读锁可以共存,读锁-写锁不可共存,写锁-写锁不可共存”。 用多线程来展示读锁和写锁的使用 public class ReadWriteLockDemo { private static volatile Map<Integer, Object> map = new Concurr 阅读全文