JAVA学习之路--线程同步

来源:互联网 发布:中国电信it研发中心 编辑:程序博客网 时间:2024/05/21 06:36
//创建一个共有的山洞
public class Cave {
//动作 :人过山洞 ,  条件: 每次只能通过一个人,每个人通过山洞的时间为5秒
public synchronized void passCave(Person person){
System.out.println("==="+person.getName()+"准备通过山洞===");

try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("---"+person.getName()+"已通过山洞---");

}
}


//定义一个Person类

public class Person {
private String name;


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


public String getName() {
return name;
}


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


//创建一个多线程类
public class PersonCave implements Runnable {
private Cave cave;
private Person person;

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

new Thread(this).start();
}

@Override
public void run() {
System.out.println(person.getName()+"到达洞口");
cave.passCave(person);
}


}


/**
 * 编写多线程应用程序,模拟多个人通过一个山洞的情况。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,随机生成10个人,
 * 同时准备过此山洞,显示一下每次通过山洞人的姓名。
 * 
 * @author viktor
 * 
 */
public class TestPersonPassCave {
public static void main(String[] args) {
String[] personArray = { "张三", "李四", "王二", "麻子", "赵五", "小明", "花花",
"如花", "旺财", "首长" };


RandomNumber randomNumber = new RandomNumber();
int c[] = randomNumber.ranNumber();


Cave cave = new Cave();


for (int index : c) {
String name = personArray[index];
Person person = new Person(name);


new PersonCave(cave, person);
}
}
}