您的位置:首页 > 其它

编写多线程应用程序

2015-09-14 18:33 267 查看
package cn.scxh.java.thread;

/*1.编写多线程应用程序,模拟多个人通过一个山洞的模拟。

这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,随机生成10个人,

同时准备过此山洞,显示一下每次通过山洞人的姓名。*/

//Person类  具有的属性是人的姓名,因为要记录每次通过山洞人的姓名。

//Person类 有没有方法呢 ?人要通过山洞,即人要调用过山洞这个方法。方法可以在Person类中,当然在山洞类中最好

public class Person {

private String name;

public Person(String name) {
super();
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

package cn.scxh.java.thread;

//Cave类中最重要的是过山洞这个方法,因为这个方法需要人去调用

public class Cave {
/*由于过山洞是共享数据必须加synchronized,可以将synchronized理解为一把锁
只有当目前这个人通过了下个人才能通过,避免一开线程,都用这条资源*/
public synchronized void crossCave(Person person){
//人正在通过山洞
//人休眠5秒
//人通过了山洞
System.out.println(person.getName()+"正准备通过山洞");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(person.getName()+"已经通过山洞");

}

}

package cn.scxh.java.thread;

public class PersonCave implements Runnable{

//开启线程
private Cave cave;
private Person person;

public PersonCave(Cave cave, Person person) {
super();
this.cave = cave;
this.person = person;
}

@Override
public void run() {
// TODO Auto-generated method stub
cave.crossCave(person);
}

}

package cn.scxh.java.thread;

public class TestPersonCave {

//测试类
public static void main(String[] args) {
// TODO Auto-generated method stub
Cave cave = new Cave();

String[] name = {"a","b","c","d","e","f"};
for (String string : name) {
Person person = new Person(string);

PersonCave pc = new PersonCave(cave,person);
Thread t1 = new Thread(pc);
t1.start();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: