多线程案例 : 等待别人到达开饭

这里我们要把别人当作一个线程。当每一个线程开启时,我们指定一个点,让他们同时到达并执行,所以使用CyclicBarrier设定一个障碍,并设置这个障碍的参数,指定规则由多少个线程同时到达才开启。不然就在此等待后面的线程。

代码演示

import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;

/**
 * @author Mxhlin
 * @Email fuhua277@163.com
 * @Date 2022/10/01/9:30
 * @Version
 * @Description 案例 全员到期开饭
 */
public class T5 {
    CyclicBarrier bar= new CyclicBarrier(3,()-> System.out.println("到齐了,开饭了"));
    void set(int e){
        System.out.println(Thread.currentThread().getName()+"开始动身(需要"+e+"秒)...");
        try {
            TimeUnit.SECONDS.sleep(e);
            System.out.println(Thread.currentThread().getName() + "到达");
            bar.await();
        } catch (InterruptedException ex) {
            throw new RuntimeException(ex);
        } catch (BrokenBarrierException ex) {
            throw new RuntimeException(ex);
        }
    }

    public static void main(String[] args) {
        T5 t5 = new T5();
        Random rand = new Random();
        new Thread(()->t5.set(rand.nextInt(5,20)),"李四").start();
        new Thread(()->t5.set(rand.nextInt(5,20)),"王五").start();
        new Thread(()->t5.set(rand.nextInt(5,20)),"李六").start();
    }
}

执行效果

多线程案例 : 等待别人到达开饭

Original: https://www.cnblogs.com/xhlin/p/16746827.html
Author: 舍橘而取橙也
Title: 多线程案例 : 等待别人到达开饭

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/584976/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring中眼花缭乱的BeanDefinition

    本篇博客主要参考:Spring官网阅读(四)BeanDefinition(上) 引入主题 为什么要读Spring源码,有的人为了学习Spring中的先进思想,也有的人是为了更好的理…

    Java 2023年6月5日
    0102
  • 设计模式—原型模式

    类型:创建型 目的:通过拷贝快速创建相同或相似对象。 接下来我们看一个需要改进的案例。 优化案例 话不多说,先来看一个创建相同或相似对象的传统写法。 public class De…

    Java 2023年6月7日
    072
  • Java学习-081-多线程14:线程状态示例

    Java 线程的 6 种状态: 初始(NEW):新创建了一个线程对象,但还没有调用 start() 方法。 运行(RUNNABLE):调用线程的 start() 方法,线程进入可运…

    Java 2023年5月29日
    097
  • 来一起写一个跳表吧

    跳表定义,初始化,查找,节点新增与删除 跳表全称叫做跳跃表,简称跳表,是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序列表上面增加多级索引,通过索引…

    Java 2023年6月9日
    060
  • Idea创建Maven+web项目

    点击File ->project Structure,选择Modules Original: https://www.cnblogs.com/stopyc/p/1649856…

    Java 2023年6月5日
    092
  • Spring5.0源码学习系列之事务管理概述

    Spring源码学习系列博客专栏:链接 Spring5.0源码学习系列之事务管理概述(十一),在学习事务管理的源码之前,需要对事务的基本理论比较熟悉,所以本章节会对事务管理的基本理…

    Java 2023年5月30日
    067
  • TCP 和 UDP 协议简介

    一、TCP TCP(Transmission Control Protocol),传输控制协议,对”传输、发送、通信”进行”控制”的…

    Java 2023年6月7日
    075
  • JDK成长记13:(深度好文)你能从3个层面分析volatile底层原理么?(上)

    前几节你应该学习到了Thread和ThreadLocal的底层原理,在接下来的几节中,让我们一起来探索volatile底层原理吧! 不知道你有没有这样的感受:有很多工程师都很难说清…

    Java 2023年6月5日
    080
  • 三十二张图告诉你,Jenkins构建Spring Boot 有多简单~

    持续原创输出,点击上方蓝字关注我 目录 前言 如何安装Jenkins? 环境准备 开始安装Jenkins 初始化配置 访问首页 输入管理员密码 安装插件 创建管理员 实例配置 配置…

    Java 2023年6月14日
    092
  • Markdown学习

    Markdown学习 标题 三级标题 四级标题 字体 Hello World! Hello World! Hello World! Hello World! 引用 选择狂神说JAV…

    Java 2023年6月9日
    084
  • Java服务端API接口统一加密和解密

    package com.ubest.scf.base.encrypt; import org.apache.commons.codec.binary.Base64; import …

    Java 2023年5月29日
    078
  • java中接口的使用

    下文中 [ ] 内的关键字均可省略,初次学习建议写全 接口就是多个类的公共规范。接口是一种引用数据类型,最重要的内容就是其中的抽象方法。 public interface 接口名称…

    Java 2023年6月7日
    098
  • Java实现pdf转html

    引入pdf2dom net.sf.cssbox pdf2dom 1.8 测试代码: import java.io.File; import java.io.FileInputStr…

    Java 2023年5月29日
    071
  • SpringBoot 集成 FreeMarker 导出 Word 或 Excel 模板文件(底部附源码)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月9日
    086
  • leetcode之二叉树

    专题:二叉树遍历 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row + 1, …

    Java 2023年6月15日
    096
  • [Java][并发编程]AQS以及其相关同步器的源码解析

    AQS以及其相关同步器的源码解析 概念 AQS( AbstractQueuedSynchronizer)抽象的队列同步器。是用来 构建锁或者其他同步器组件的重量级基础框架以及整个 …

    Java 2023年6月5日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球