java并发编程之同步器(1)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName()

  • " finished!!");

finishedSingal.countDown();

};

}.start();

}

Thread.sleep(1000);

startSingal.countDown();// 所有的线程被唤醒,同时开始工作.countDown 方法的线程等到计数到达零时才继续

finishedSingal.await();// 等待所有的线程完成!!

System.out.println(“All task are finished!!”);

}

}

package hb.java.thread;

import java.util.concurrent.BrokenBarrierException;

import java.util.concurrent.CyclicBarrier;

/**

  • JAVA同步器之Barrier(能够循环使用,当计数器增加到Barrier的初始化计数器之后马上会被置为0为下一次循环使用做准备)

  • Barrier能够为指定的一个或多个(一般为多个)线程设置一道屏障,只有当所有的线程都到达该屏障后才能一起冲过该屏障继续其他任务 一般可以new

  • CyclicBarrier(ThreadCount)来进行初始化,也可以new

  • CyclicBarrier(ThreadCount,RunableAction)当初始化数量的线程都调用

  • 了await()方法后触发RunableAction线程,也可以通过初始化一个new

  • CyclicBarrier(ThreadCount+1)的Barrier在前置线程未执行完成时一直阻塞一个或多个

  • 后续线程,这一点类似于CountDownLatch

*/

public class BarrierTest {

private static final int THREAD_COUNT = 10;

private static final CyclicBarrier barrier = new CyclicBarrier(

THREAD_COUNT + 1, new Runnable() {

@Override

public void run() {

System.out.println(“All task are prepared or finished!!”);

}

});

public static void main(String[] args) throws InterruptedException,

BrokenBarrierException {

for (int i = 0; i < THREAD_COUNT; i++) {

new Thread("Task " + i) {

public void run() {

try {

System.out.println(Thread.currentThread().getName()

  • " prepared!!");

barrier.await();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (BrokenBarrierException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// do something

System.out.println(Thread.currentThread().getName()

  • " finished!!");

};

}.start();

}

barrier.await();

// --------------开始准备循环使用--------------

for (int i = 0; i < THREAD_COUNT; i++) {

new Thread("Task " + i) {

public void run() {

// do something

System.out.println(Thread.currentThread().getName()

  • " finished!!");

try {

barrier.await();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (BrokenBarrierException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

};

}.start();

}

barrier.await();

}

}

package hb.java.thread;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.Exchanger;

public class ExchangerTest {

final static Exchanger<List> exchanger = new Exchanger<List>();

public static void main(String[] args) {

new Producer(“Producer”, exchanger).start();

new Consumer(“Consumer”, exchanger).start();

}

static class Producer extends Thread {

private Exchanger<List> exchanger;

/**

*/

public Producer(String threadName, Exchanger<List> exchanger) {

super(threadName);

this.exchanger = exchanger;

}

/*

  • (non-Javadoc)

  • @see java.lang.Thread#run()

*/

@Override

public void run() {

List products = new ArrayList();

for (int i = 0; i < 10; i++) {

products.add("product " + i);

}

try {

List results = exchanger.exchange(products);

System.out.println(“get results from consumer”);

for (String s : results) {

System.out.println(s);

}

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

static class Consumer extends Thread {

private Exchanger<List> exchanger;

Java高频面试专题合集解析:

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

更多Java架构进阶资料展示

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
a架构学习进阶导图!**

[外链图片转存中…(img-mPnSzkfw-1714455058015)]

更多Java架构进阶资料展示

[外链图片转存中…(img-niw9rHeV-1714455058015)]

[外链图片转存中…(img-pkS0mfro-1714455058015)]

[外链图片转存中…(img-AgMxFXUZ-1714455058015)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值