Java 中的并发工具类

CountDownLatch

public class JoinCountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
Thread parser1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("parser1 finish!");
}
}); Thread parser2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("parser2 finish!");
}
}); parser1.start();
parser2.start();
parser1.join();
parser2.join();
System.out.println("all parser finish!");
}
}

运行结果

parser1 finish!

parser2 finish!

all parser finish!



parser2 finish!

parser1 finish!

all parser finish!

import java.util.concurrent.CountDownLatch;

public class CountDownLatchTest {
private static CountDownLatch count = new CountDownLatch(2); public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(1);
count.countDown();
System.out.println(2);
count.countDown();
}
}); t1.start();
try {
count.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(3);
}
}

运行结果

1

2

3

CyclicBarrier

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier; public class CyclicBarrierTest {
private static CyclicBarrier c = new CyclicBarrier(2); public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(1);
}
}); t.start(); try {
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(2);
}
}

运行结果

1

2



2

1

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier; public class CyclicBarrierTest2 {
private static CyclicBarrier c = new CyclicBarrier(2, new A()); public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(1);
}
}); t.start();
try {
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(2);
} private static class A implements Runnable {
@Override
public void run() {
System.out.println(3);
}
}
}

运行结果

3

1

2



3

2

1

import java.util.Map;
import java.util.concurrent.*; public class BankWaterService implements Runnable {
private CyclicBarrier c = new CyclicBarrier(4, this);
private ExecutorService executor = Executors.newFixedThreadPool(4);
private ConcurrentHashMap<String, Integer> sheetBankWaterCount = new ConcurrentHashMap<>(); private void count() {
for (int i = 0; i < 4; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
sheetBankWaterCount.put(Thread.currentThread().getName(), 1);
try {
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
});
}
executor.shutdown();
} @Override
public void run() {
int result = 0;
for (Map.Entry<String, Integer> sheet : sheetBankWaterCount.entrySet()) {
result += sheet.getValue();
}
sheetBankWaterCount.put("result", result);
System.out.println(result);
} public static void main(String[] args) {
BankWaterService bankWaterCount = new BankWaterService();
bankWaterCount.count();
}
}

运行结果

4

import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierTest3 {
private static CyclicBarrier c = new CyclicBarrier(2); public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
c.await();
} catch (Exception e) {
}
}
});
t.start(); Thread.sleep(1000);
System.out.println(c.getNumberWaiting());
t.interrupt();
try {
c.await();
} catch (Exception e) {
System.out.println(c.isBroken());
}
}
}

运行结果

1

true

Semaphore

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore; public class SemaphoreTest {
private static final int THREAD_COUNT = 30;
private static ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
private static Semaphore s = new Semaphore(10); public static void main(String[] args) {
for (int i = 0; i < THREAD_COUNT; i++) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
s.acquire();
System.out.println("save data!");
s.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
executor.shutdown();
}
}

Exchanger

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class ExchangerTest {
private static final Exchanger<String> exgr = new Exchanger<>();
private static ExecutorService executor = Executors.newFixedThreadPool(2); public static void main(String[] args) {
executor.execute(new Runnable() {
@Override
public void run() {
String A = "银行流水 A";
try {
exgr.exchange(A);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}); executor.execute(new Runnable() {
@Override
public void run() {
String B = "银行流水 B";
try {
String A = exgr.exchange(B);
System.out.println("A 和 B 数据是否一致:" + A.equals(B) + ",\nA 录入的是:" + A + ",\nB 录入的是:" + B + "。");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}); executor.shutdown();
}
}

运行结果

A 和 B 数据是否一致:false,

A 录入的是:银行流水 A,

B 录入的是:银行流水 B。

Java 中的并发工具类的更多相关文章

  1. Java中的并发工具类(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)

    在JDK的并发包里提供了很多有意思的并发工具类.CountDownLatch.CyclicBarrier和Semaphore 工具类提供了一种并发流程控制的手段,Exchanger 工具类则提供了在线 ...

  2. java中的并发工具类

    在jdk的并发包里提供了几个非常有用的并发工具类.CountDownLatdch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线 ...

  3. 第八章 Java中的并发工具类

    等待多线程完成的CountDownLatch countDownLatch允许一个或多个线程等待其他线程完成操作. public class CountDownLatchTest { static C ...

  4. Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...

  5. 第8章 java中的并发工具类

    8.1 等待线程完成的CountDownLatch 作用:让一个线程等待其余线程完成之后在继续执行,如主线程等待开启服务的子线程执行完毕后主线程继续执行,类似于join.

  6. Java线程的并发工具类

    Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...

  7. JAVA中封装JSONUtils工具类及使用

    在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...

  8. java中常用的工具类(一)

    我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...

  9. 并发06--JAVA中的并发工具类

    1.等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. 使用join也可以完成这个操作,代码示例如下: package com.exam ...

随机推荐

  1. golang-笔记1

    指针: 指针就是地址. 指针变量就是存储地址的变量. *p : 解引用.间接引用. 栈帧: 用来给函数运行提供内存空间. 取内存于 stack 上. 当函数调用时,产生栈帧.函数调用结束,释放栈帧. ...

  2. 备用shell管理方案之butterfly+nginx+https

    安装butterfly+nginx https 1. 安装butterfly yum install python36 python36-pip python36-devel -y pip insta ...

  3. 自动化部署--Jenkins

    自动化部署--Jenkins--简介安装(一) https://www.jianshu.com/p/b9ce206139f1 自动化部署--Jenkins--Maven构建(二)  https://w ...

  4. crontab 定时访问指定url,定时脚本

    一.contab格式说明 二.定时访问url: 1.连接远程主机,连接成功后,输入命令  crontab -e : 2.参照VI编辑器.按字母 i 进入编辑模式,输入需要执行的脚本:(在这里之前要检查 ...

  5. 2018-2019-2 网络对抗技术 20165212 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165212 Exp6 信息搜集与漏洞扫描 原理与实践说明 1.实践原理 信息搜集:渗透测试中首先要做的重要事项之一,搜集关于目标机器的一切信息 间接收集 D ...

  6. centos安装jdk1.8的三种方法

    一.手动解压安装包: 1.在user目录下新建java文件夹:   # cd /usr/   # mkdir java   # cd java 2.下载jdk1.8,进入http://www.orac ...

  7. JVM 线程上下文类加载器

    当前类加载器(Current ClassLoader) 每个类都会使用自己的类加载器(即加载自身的类加载器)来去加载其他类(指所依赖的类) 如果ClassX引用了ClassY,那么ClassX的类加载 ...

  8. sqlserver2016 kb补丁

    1. win2012r2 安装时 总是提示: 然后费了半天劲 下载下来又提示 找了一下 需要先安装这么一个补丁才可以 KB2919442 然后才能安装上 KB2919355 然后就可以正常安装了:

  9. 产品经理 写SQL

    产品经理必备技能:写SQL - 云+社区 - 腾讯云https://cloud.tencent.com/developer/news/3177 产品经理学SQL(一)一个小时上手SQL | 人人都是产 ...

  10. Flutter Container容器组件、Text文本组件详解

    import 'package:flutter/material.dart'; void main(){ runApp(MyApp()); } class MyApp extends Stateles ...