有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。
来源:互联网 发布:害怕异性亲密关系 知乎 编辑:程序博客网 时间:2024/05/16 19:46
package cn.thread;public class Through_out_bridge { public static void main(String[] args) { Bridge b = Bridge.getInstance();//实例化桥 //实例化左端9个人,此时所有人都不能过桥,桥的可以状态标志为不可以用 for (int i = 1; i <= 9; i++) { Thread t = new Thread(new Person(false, i, b)); t.start(); } //实例化右端12个人,此时所有人都不能过桥,桥的可以状态标志为不可以用 for( int i=1 ;i<=12;i++) { Thread t = new Thread(new Person(true,i,b)); t.start(); } //桥的可用状态给左端第10个人,可以自定义给谁 b.state = true; Thread t = new Thread(new Person(false, 10, b)); }}class Person implements Runnable { public Bridge bridge;//桥 private String hand;//在桥哪一端 int No;//序号 public Person(boolean side, int i, Bridge bridge) { this.No = i; this.bridge = bridge; if(bridge.state) { System.out.println(i+"已经过桥。"); } if (side) { this.hand = new String("右"); } else { this.hand = new String("左"); } } //过桥方法 public synchronized void through() throws InterruptedException { if (bridge.state) { System.out.println(hand+"边第"+No + "在过桥"); bridge.open( No); } else { bridge.lock(No); } } public void run() { try { Thread.sleep(1000);// System.out.println(No+hand+" 边已经过桥!"); through(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}class Bridge { //可用状态判断true:可用 public boolean state = false; //自行实例化 public static Bridge getInstance() { return new Bridge(); } public synchronized void open(int i) throws InterruptedException { if (state) { Thread.sleep(1000); this.state=true; notify(); } } public synchronized void lock(int i) throws InterruptedException { if (!state) { this.state=false; System.out.println(i + " 在等待."); wait(); } }}
- 有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。
- 甲;乙;丙;丁四个人过桥,分别需要1,2,5,因为天黑,必须借助手电筒过桥可是总共只有一个手电筒,并且桥的载重能力有限,只能承受两个人的重量也就是说每次最多过两个人,怎样才能做到用
- 每个人的QQ里 都有一个这样的人
- 每个人的QQ里 都有一个这样的人
- 每个人的QQ里 都有一个这样的人
- 可供多线程调用的只能有一个在执行的原子操作实现
- 一个java文件中只能有一个public修饰的类,只能有一个main方法,
- 多人在受限时间内的过桥策略
- 进程有一个全局变量i,还有有两个线程。i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。
- 对于编程的朋友,每个人在学校里面都有一个故事
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次通过山洞的人名
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次通过山洞的人名
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次通过山洞的人名
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出
- MessageBox(...), 只能让它显示在屏幕的中央, 能不能显示在一个Form的中央???
- 喜欢一个人和爱一个人的区别
- 高亚科技公司笔试回来,贡献一下笔试题
- 第四次C程序上机报告
- 关于火星坐标系统
- gawk 使用详解
- QT入门-一个简单的计算器程序
- 有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。
- opencv 笔记 00Begin
- ssh框架下 对数据库的增删改查
- 生活需要奋斗
- linux下查询进程命令 ps 详细分析
- 抽象工厂模式——Head First Design Patterns
- 腾讯2011.10.15校园招聘会笔试题
- BufferedImage与byte[]互转
- 设计模式在android中的应用——适配器模式