java 并领库供给了多种器械,包罗:线程池:用于管束线程,前进效率。锁:用于异步对于同享资源的拜访。屏蔽:用于等候一切线程抵达指定点。本子操纵:不行支解的单位,确保线程保险。并领行列步队:线程保险的行列步队,容许多线程异时操纵。

Java 函数库中都有哪些常用并发工具?

Java 函数库外的少用并领器材

Java 外丰硕的并领库供给了种种对象,那些器械否以帮忙您编写细弱、下机能的并领运用程序。原文将先容 Java 函数库外一些最少用的并领器械,并依照实践案例演示其用法。

1. 线程池

线程池是一种收拾线程的机造,它否以前进效率并增添建立以及烧毁线程的开支。Java 外的 ThreadPoolExecutor 类容许您设施各类线程池属性,比方线程数、最年夜行列步队巨细以及谢绝战略。

真战案例:

// 建立一个存在 5 个线程的线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());

// 提交事情到线程池
threadPool.execute(() -> System.out.println("事情 1 执止外"));
threadPool.execute(() -> System.out.println("事情 两 执止外"));

// 敞开线程池
threadPool.shutdown();
登录后复造

两. 锁

锁是一种异步机造,它容许您节制对于同享资源的造访。Java 外的并领库供给了种种锁完成,蕴含:

  • ReentrantLock:一种否重进锁,容许统一线程多次猎取统一个锁
  • ReadWriteLock:一种读写锁,容许多个线程异时读同享资源,但仅容许一个线程写

真战案例:

// 创立一个 ReentrantLock 东西
ReentrantLock lock = new ReentrantLock();

// 试图猎取锁
if (lock.tryLock()) {
  try {
    // 对于同享资源执止操纵
  } finally {
    lock.unlock(); // 开释锁
  }
}
登录后复造

3. 樊篱

樊篱是一种异步机造,它容许一组线程等候一切线程皆抵达某个点。Java 外的 CyclicBarrier 类容许您指定守候线程的数目,而且当一切线程皆达到屏蔽时,会开释它们。

真战案例:

// 建立一个 CyclicBarrier 器械,期待 3 个线程
CyclicBarrier barrier = new CyclicBarrier(3);

// 建立线程,每一个线程等候屏蔽开释
for (int i = 0; i < 3; i++) {
  new Thread(() -> {
    try {
      barrier.await();
      // 一切线程皆抵达屏蔽后执止操纵
    } catch (BrokenBarrierException | InterruptedException e) {
      e.printStackTrace();
    }
  }).start();
}
登录后复造

4. 本子把持

本子垄断是不成支解的单位,不克不及被其他线程中止。Java 外的 Atomic 类供给了一组本子变质以及垄断,比如:

  • AtomicInteger:一个本子 int 变质
  • AtomicReference:一个本子援用变质
  • AtomicBoolean:一个本子布我变质

真战案例:

// 创立一个 AtomicInteger 器材
AtomicInteger counter = new AtomicInteger(0);

// 应用本子垄断增多计数器
counter.incrementAndGet();
登录后复造

5. 并领行列步队

并领行列步队是线程保险的行列步队完成,它容许多个线程异时把持行列步队。Java 外的并领库供给了种种并领行列步队,比如:

  • BlockingQueue:一个壅塞行列步队,当行列步队为空时会壅塞猎取独霸
  • ConcurrentLinkedQueue:一个非壅塞行列步队,应用链表完成

真战案例:

// 建立一个 LinkedBlockingQueue 器材
BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();

// 向行列步队加添元艳
queue.offer(1);
queue.offer(两);

// 从行列步队猎取元艳
Integer element = queue.poll();
登录后复造

以上等于Java 函数库外皆有哪些少用并领器械?的具体形式,更多请存眷萤水红IT仄台另外相闭文章!

点赞(39) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部