多线程的互斥与同步

编程入门 行业动态 更新时间:2024-10-22 11:42:55

<a href=https://www.elefans.com/category/jswz/34/1767532.html style=多线程的互斥与同步"/>

多线程的互斥与同步

多线程的互斥与同步

题目:在一家抠门的公司,办公室里有三个员工,小李,小王,小刘,一个马桶,在一个美丽的工作日早晨,由于三个人去了昨晚老板请的饭局,都在闹肚子,需要上厕所,考虑到同事们的冷漠(不会递纸给你),所以上厕所前需要保证纸张数目的够用,如果不够用,需要在进入厕所前提前去老板办公室拿纸。
根据公司量身定制的纸张需求数:
小李:10张
小王:12张
小刘:13张
马桶旁目前有25张纸,请合理模拟这个美丽的工作日早晨发生的情景。

public class Emp {private String name;private int paper;public Emp(String name, int paper) {this.name = name;this.paper = paper;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPaper() {return paper;}public void setPaper(int paper) {this.paper = paper;}
}import java.util.HashMap;
import java.util.Map;public class Tolite implements Runnable{private int paper;public Map map = new HashMap();public Tolite(int paper) {this.paper = paper;}public int getPaper() {return paper;}public void setPaper(int paper) {this.paper = paper;}@Overridesynchronized public void run() {int need = (int)map.get(Thread.currentThread().getName());if(paper - need >= 0){paper -= need;System.out.println("我是" + Thread.currentThread().getName() + ",我很舒爽,还剩"+paper+"张纸!");}else{System.out.println("我是" + Thread.currentThread().getName() + ",老板,纸又不够了!");}}
}public class TestTolite {public static void main(String[] args) {Emp li = new Emp("小李",10);Emp wang = new Emp("小王",12);Emp liu = new Emp("小刘",13);List<Emp> emp = new ArrayList();List<Thread> threads = new ArrayList();emp.add(li);emp.add(wang);emp.add(liu);Tolite myTolite = new Tolite(25);for (Emp e : emp) {threads.add(new Thread(myTolite,e.getName()));myTolite.map.put(e.getName(),e.getPaper());}for (Thread thread:threads) {thread.start();}}
}

更多推荐

多线程的互斥与同步

本文发布于:2024-02-11 14:27:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1681468.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多线程   互斥

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!