Java多线程模拟多人过山洞
来源:互联网 发布:白酒网络营销策划方案 编辑:程序博客网 时间:2024/06/10 00:20
编写多线程应用程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,随机生成10个人,同时准备过此山洞,显示一下每次通过山洞人的姓名。
思路:这里随机生成10个人,就好比是10个线程,并发的执行,它们竞争这个山洞的通过权,同时,每个人通过山洞的时间是5s。但是这里随机的意思,不知道是通过的顺序有随机性,还是生成人的名字的随机,但是我感觉,这里如果是随机生成人名,好像并没有什么意义,既然是多线程的编程,所以我的理解是通过的顺序要是随机的。
解决办法:使用线程回调的方法,将10个人的名字定义在回调类中,共享给其他10个线程,然后每个线程在输出人名的时候,给它进行同步,也就是将获得人名的方法进行同步操作,同时延迟5s输出人名,模拟通过时间为5s。
具体代码:
回调类:
package com.xgd.thread.test;/** * Package: com.xgd.thread.test * * File: ThroughCave.java * * Author: jiangpan Date: 2015年9月21日 * * Copyright @ 2015 Corpration Name * */public class ThroughCave {private String[] name;public ThroughCave() {//在构造方法中初始化一个包含10个人名的String数组String[] name = {"张三","李四","王五","马六","牛七","王八","小明","小红","小花","小雷"};this.name = name;}//输出人名的方法,同步化synchronizedpublic synchronized void PrintName(String name){//延迟5s,模拟过山洞的时间为5stry {Thread.sleep(5000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(name);}//将10个人名分给10个线程,模拟10个人public void SendAllNames(){for (int i = 0; i < name.length; i++) {GetNameThread gt = new GetNameThread(this, name[i]);gt.start();}}public static void main(String[] args){ThroughCave tc = new ThroughCave();tc.SendAllNames();}}
线程类:
package com.xgd.thread.test;/** * Package: com.xgd.thread.test * * File: GetNameThread.java * * Author: jiangpan Date: 2015年9月21日 * * Copyright @ 2015 Corpration Name * */public class GetNameThread extends Thread{private ThroughCave tcave;private String name;//初始化线程的时候,获得回调类对象和人名public GetNameThread(ThroughCave tcave,String name) {this.tcave = tcave;this.name = name;}public void run(){//输出人名,模拟过山洞tcave.PrintName(name);}}
1 1
- Java多线程模拟多人过山洞
- 多线程之模拟多人过山洞
- java任务--过山洞多线程
- 多线程---模拟多人通过山洞
- 过山洞(多线程)
- Java 十人过山洞
- Java作业-十个人过山洞(多线程)
- 多线程——过山洞
- 线程同步(多人过山洞)
- Java练习题23 过山洞
- 编写多线程程序,模拟多个人通过一个山洞。
- 编写多线程程序,模拟多个人通过一个山洞
- 编写多线程程序,模拟多个人通过一个山洞。
- 过山洞
- 过山洞
- 编写多线程程序,模拟多个人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为2秒(sleep)。
- 编写多线程应用程序,模拟多个人通过一个山洞的模拟
- 作业1 编写多线程程序,模拟多个人通过一个山洞。
- android的多种对话框
- Spring 中的byName与 byType
- [优化篇]OpenStack的虚拟桌面协议Spice代替VNC(2)
- 【读书笔记】iOS-内存释放
- MFC Edit空间获得焦点
- Java多线程模拟多人过山洞
- 简化SQL计算之字母分段
- SecureCRT 7序列号
- 问题解决:tomcat使用”严重: Error initializing endpoint“
- Docker 架构之Daemon
- Java知识点小计 持续更新中
- C# ListView 点击标题头排序(二分法排序)(泛型)
- windows系统下文件不能删除的原因
- 重新启用我的博客