Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1)

这篇具有很好参考价值的文章主要介绍了Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/**

 * 当人到齐,自动开门程序

 */

final CyclicBarrier barrier = new CyclicBarrier(STUDENT_COUNT,

		new Runnable()

		{

			@Override

			public void run()

			{

				System.out.println("人到齐了,开门....");

			}

		});



public void goHome() throws InterruptedException, BrokenBarrierException

{

	System.out.println(Thread.currentThread().getName() + "已刷卡,等待开门回家~");

	barrier.await();

	System.out.println(Thread.currentThread().getName() + "放学回家~");

}



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

		BrokenBarrierException

{



	final CyclicBarrierTest instance = new CyclicBarrierTest();



	/**

	 * 每个线程代表一个学生

	 */

	for (int i = 0; i < instance.STUDENT_COUNT; i++)

	{

		new Thread("学生" + i +"  " )

		{

			public void run()

			{



				try

				{

					instance.goHome();

				} catch (InterruptedException e)

				{

					e.printStackTrace();

				} catch (BrokenBarrierException e)

				{

					e.printStackTrace();

				}



			};



		}.start();

	}



}

}


  

输出结果:



学生1 已刷卡,等待开门回家~

学生3 已刷卡,等待开门回家~

学生5 已刷卡,等待开门回家~

学生9 已刷卡,等待开门回家~

学生7 已刷卡,等待开门回家~

学生0 已刷卡,等待开门回家~

学生2 已刷卡,等待开门回家~

学生6 已刷卡,等待开门回家~

学生8 已刷卡,等待开门回家~

学生4 已刷卡,等待开门回家~

人到齐了,开门…

学生4 放学回家~

学生1 放学回家~

学生3 放学回家~

学生5 放学回家~

学生9 放学回家~

学生2 放学回家~

学生6 放学回家~

学生0 放学回家~

学生7 放学回家~

学生8 放学回家~


  

哈哈,如果哪个幼儿园用了这么一套系统,孩子应该不会丢学校了吧,,,,开玩笑了;;



CyclicBarrier把所有的线程都阻塞在一个阀门位置,然后等到等待的线程数到达预设的值,就打开这个阀门。记得是阻塞线程,不是阻塞操作,在同一个线程使劲掉await是没什么效果的。



  



上面的例子显示了CyclicBarrier的基本用法,但是cyclic的功能并没有显示出来,既然注释中讲了,我们有必要来个例子看看:



我们改造下我们的门禁,毕竟刷卡好不现实,现在需求是这样的:学生一个人走太危险,现在门卫放学在门口守着,让学生3个一组的走。



package com.zhy.concurrency.cyclic;

import java.util.concurrent.BrokenBarrierException;

import java.util.concurrent.CyclicBarrier;

/**

  • 改造后的门禁系统

  • @author zhy

*/

public class CyclicBarrierTest2

{

/**

 * 学生总数

 */

private final int STUDENT_COUNT = 12;



/**

 * 每3个人一组出门

 */

final CyclicBarrier barrier = new CyclicBarrier(3,

		new Runnable()

		{

			@Override

			public void run()

			{

				System.out.println("有3个学生到齐了,放行....");

			}

		});



public void goHome() throws InterruptedException, BrokenBarrierException

{

	System.out.println(Thread.currentThread().getName() + "已刷卡,等待开门回家~");

	barrier.await();

}



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

		BrokenBarrierException

{



	final CyclicBarrierTest2 instance = new CyclicBarrierTest2();



	/**

	 * 每个线程代表一个学生

	 */

	for (int i = 0; i < instance.STUDENT_COUNT; i++)

	{

		new Thread("学生" + i +"  " )

		{

			public void run()

			{



				try

				{

					instance.goHome();

				} catch (InterruptedException e)

				{

					e.printStackTrace();

				} catch (BrokenBarrierException e)

				{

					e.printStackTrace();

				}



			};



		}.start();

	}



}

}


输出结果:



学生0 已刷卡,等待开门回家~

学生1 已刷卡,等待开门回家~

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

_convert/bcd1787ce996787388468bb227d8f959.jpeg)

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1),2024年程序员学习,java,安全,开发语言

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-6zMxp3u2-1712836511253)]文章来源地址https://www.toymoban.com/news/detail-858970.html

到了这里,关于Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java技术专题】「盲点追踪」突破知识盲点分析Java安全管理器(SecurityManager)

    Java安全应该包括两方面的内容,一是Java平台(即是Java运行环境)的安全性;二是Java语言开发的应用程序的安全性。由于我们不是Java本身语言的制定开发者,所以第一个安全性不需要我们考虑。其中第二个安全性是我们重点考虑的问题,一般我们可以通过安全管理器机制来

    2024年02月08日
    浏览(41)
  • 【Java并发编程】变量的线程安全分析

    1.成员变量和静态变量是否线程安全? 如果他们没有共享,则线程安全 如果被共享: 只有读操作,则线程安全 有写操作,则这段代码是临界区,需要考虑线程安全 2.局部变量是否线程安全 局部变量是线程安全的 当局部变量引用的对象则未必 如果给i对象没有逃离方法的作用

    2024年02月08日
    浏览(56)
  • Java ConcurrentHashMap 高并发安全实现原理解析

    if (tab == null || (n = tab.length) == 0) tab = initTable(); else if ((f = tabAt(tab, i = (n - 1) h)) == null) { //创建占位Node NodeK, V r = new ReservationNodeK, V(); //先锁定该占位Node synchronized ® { //将其设置到BIN的头节点 if (casTabAt(tab, i, null, r)) { binCount = 1; NodeK, V node = null; try { //开始原子计算 if ((val = remap

    2024年03月23日
    浏览(30)
  • 基于Java+Vue+uniapp微信小程序研学自习室选座与门禁系统设计和实现

    博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟 2022-2024年

    2024年02月02日
    浏览(59)
  • 安全无忧:Java并发集合容器的应用与实践

    JDK 提供的这些容器大部分在 java.util.concurrent 包中: ConcurrentHashMap : 线程安全的 HashMap CopyOnWriteArrayList : 线程安全的 List,在读多写少的场合性能非常好,远远好于 Vector ConcurrentLinkedQueue : 高效的并发队列,使用链表实现。可以看做一个线程安全的 LinkedList,这是一个非阻塞队列

    2024年01月19日
    浏览(44)
  • Java 8并发集合:安全高效的多线程集合

    在多线程环境中,使用线程安全的数据结构非常重要,以避免竞态条件和数据不一致的问题。Java 8引入了一些并发集合类,提供了安全高效的多线程集合操作。本教程将介绍Java 8中的并发集合类,包括ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentSkipListSet和CopyOnWriteArrayList。 Conc

    2024年02月04日
    浏览(55)
  • java面试题(23):Spring Bean如何保证并发安全

    1 问题分析 我们知道默认情况下,Spring中的Bean是单例的,所以在多线程并发访问的时候,有可能会出现线程安全问题。 2 解决方案 有几个方面的解决思路: 我们可以设置Bean的作用域设置为原型(prototype),这样每次从容器中获取该 Bean 的时候,都会创建一个新的实例,避免

    2024年01月18日
    浏览(42)
  • Java使用redis-Redis是并发安全的吗?

    大家都清楚,Redis 是一个开源的高性能键值对存储系统,被开发者广泛应用于缓存、消息队列、排行榜、计数器等场景。 由于其高效的读写性能和丰富的数据类型,Redis 受到了越来越多开发者的青睐。然而,在并发操作下,Redis 是否能够保证数据的一致性和安全性呢?接下来

    2024年02月11日
    浏览(72)
  • 【Java|多线程与高并发】线程安全问题以及synchronized使用实例

    Java多线程环境下,多个线程同时访问共享资源时可能出现的数据竞争和不一致的情况。 线程安全一直都是一个令人头疼的问题.为了解决这个问题,Java为我们提供了很多方式. synchronized、ReentrantLock类等。 使用线程安全的数据结构,例如ConcurrentHashMap、ConcurrentLinkedQueue等

    2024年02月09日
    浏览(46)
  • Java ConcurrentHashMap 高并发安全实现原理解析,字节大牛耗时八个月又一力作

    //下一个哈希表 private transient volatile NodeK,V[] nextTable; //计数的基准值 private transient volatile long baseCount; //控制变量,不同场景有不同用途,参考下文 private transient volatile int sizeCtl; //并发搬运过程中CAS获取区段的下限值 private transient volatile int transferIndex; //计数cell初始化或者扩容

    2024年04月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包