并发编程模拟

发布时间:2025-01-15 00:33

了解并模拟可能的应对流程 #生活技巧# #紧急应对技巧# #突发事件心理疏导#

多个部门厕所排队问题

最新推荐文章于 2024-09-25 19:16:13 发布

funtaster 于 2017-11-24 17:52:26 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

场景:公司有若干部门,每个部门一个厕所,每个部门的员工争抢本部门的厕所

import java.util.Map;

import java.util.Random;

import java.util.concurrent.ConcurrentHashMap;

public class ToiletTester {

private static final int personNum = 30;

public static Map<Integer, Toilet> DepToilets = new ConcurrentHashMap<>();

public static void main(String[] args) {

for (int i = 1; i <= personNum; i++) {

int depId = randomRange(5, 1);

String empName = fixedLengthFill0(3, i) + " 号员工";

Person person = new Person(depId, empName);

person.start();

}

}

public static Integer randomRange(int max, int min) {

return new Random().nextInt(max)%(max-min+1) + min;

}

private static String fixedLengthFill0(int length, int seq) {

StringBuilder strBu = new StringBuilder();

int fillLen = length - String.valueOf(seq).length();

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

strBu.append("0");

}

strBu.append(seq);

return strBu.toString();

}

}

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class Toilet {

private Integer depId;

private Lock lock = new ReentrantLock(true);

public Toilet(Integer depId) {

this.depId = depId;

}

public void enter() {

try {

lock.lock();

System.out.println(Thread.currentThread().getName() + "获得Toilet-DEP"+depId+" 使用权,time:" + System.currentTimeMillis());

int sec = ToiletTester.randomRange(3, 1);

Thread.sleep(sec * 1000);

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

lock.unlock();

}

}

public Integer getDepId() {

return depId;

}

public void setDepId(Integer depId) {

this.depId = depId;

}

public Lock getLock() {

return lock;

}

}

public class Person extends Thread{

private Integer depId;

private String empName;

public Person(Integer depId, String empName) {

this.setName("DEP" + depId + "-" + empName);

this.depId = depId;

this.empName = empName;

}

@Override

public void run() {

ToiletTester.DepToilets.putIfAbsent(depId, new Toilet(depId));

Toilet toilet = ToiletTester.DepToilets.get(depId);

toilet.enter();

super.run();

}

public String getEmpName() {

return empName;

}

public void setEmpName(String empName) {

this.empName = empName;

}

public Integer getDepId() {

return depId;

}

public void setDepId(Integer depId) {

this.depId = depId;

}

}

网址:并发编程模拟 https://www.yuejiaxmz.com/news/view/715838

相关内容

Java并发编程深入学习指南
复古风格的DIY模拟温度计制作教程
C语言模拟用户登录程序
《虚拟机器人编程:让智能助手成为你生活中的好帮手》
花园模拟器《花园生涯:模拟佛系生活》现已发售
VR监狱模拟生活软件源码开发
料理模拟器攻略
模拟
模拟人生4图文全教程攻略宝典
能耗模拟软件哪个好?2021软服之家能耗模拟软件热度排行榜(能耗模拟软件有哪些)

随便看看