编写多线程应用程序

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();
}
}


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值