编写多线程应用程序
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();
}
}
}
/*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();
}
}
}
相关文章推荐
- 小学递归查询
- pdf文件怎么修改
- SQL Server学习记录之日期操作
- grunt.js配置
- sparksql与hive整合
- FPGA工具篇——编辑器Notepad++
- sparksql与hive整合
- 番茄工作法之啊哈的感想
- 事务的实现,隔离级别与锁
- hdu1573 X问题(中国剩余定理解的个数)
- 排序分页结果错乱的问题
- GTK+浅谈之五等待旋转动画
- oracle 11g密码过期但不想更新密码
- JAVA-有趣的GuessBirthday
- 超级课程表原理解析(如何获取网页内容)
- 随机知识总结1
- encodeURIComponent()对js参数进行编码,防止错误值
- Mvc4_@RenderBody()和@RenderSection()
- 【Linux网络编程】无连接和面向连接协议的区别
- inno setup 提前安装外围程序,比如.net framework