线程同步问题简单例子
来源:互联网 发布:c语言function函数 编辑:程序博客网 时间:2024/05/19 17:03
1.编写多线程应用程序,模拟多个人通过一个山洞的模拟。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,随机生成10个人,
同时准备过此山洞,显示一下每次通过山洞人的姓名。
错误实例如下(虽考虑到对象同步问题,忽略了对象实例化问题,此时以山洞为对象,只能存在单一对象,否则则会成为单线程问题)
public class ThroughCave implements Runnable{
private String name;
public ThroughCave(Stringname) {
// TODOAuto-generated constructor stub
this.name = name;
}
@Override
public void run() {
// TODOAuto-generated method stub
synchronized (this){
try {
Thread.sleep(5000);
} catch(InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
Thread.currentThread().setName(name);
System.out.println(Thread.currentThread().getName()+"已经通过");
}
}
}
public class TestThrough {
public static voidmain(String[] args) {
// TODOAuto-generated method stub
//每次调用线程时都重新new了一个对象,实际则成为了10个线程同时进入10个山洞的问题,
//因此把它看成是多个窗口卖同一组票,但不能重复的问题相同了。
new Thread(newThroughCave("a")).start();
new Thread(new ThroughCave("b")).start();
new Thread(newThroughCave("c")).start();
new Thread(newThroughCave("d")).start();
new Thread(newThroughCave("e")).start();
new Thread(newThroughCave("f")).start();
new Thread(newThroughCave("g")).start();
new Thread(newThroughCave("h")).start();
new Thread(newThroughCave("i")).start();
new Thread(newThroughCave("j")).start();
}
}
修改后的示例如下
public class ThroughCave implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
getThrouth();
}
public synchronized void getThrouth(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"已经通过");
}
}
public class TestThrough {
public static void main(String[] args) {
// TODO Auto-generated method stub
ThroughCave tc = new ThroughCave();//一个对象
new Thread(tc, "a").start();//调用同一对象,a为线程名,此处可看做人名
new Thread(tc, "v").start();
new Thread(tc, "f").start();
new Thread(tc, "s").start();
}
}
- 线程同步问题简单例子
- java线程同步简单例子
- java线程同步简单例子
- JAVA线程同步生产者/消费者简单例子
- 最简单的线程同步的例子
- 一个简单例子了解使用互斥量线程同步
- 线程同步例子
- 线程同步的例子
- 关于取款问题 java同步简单的小例子
- Java线程同步的例子
- 实现线程同步的例子
- 线程同步的小例子
- java线程同步入门例子
- Python简单线程同步
- 线程的简单例子
- 线程池简单例子
- 线程/进程同步问题
- 线程同步问题2
- UITableView Cell上添加按钮后改变选择状态
- 上机实验三
- iosiOS学习总结----九宫格搭建方法
- Tomcat6.0启动startup.bat一闪而过
- 安卓基本控件之EditText
- 线程同步问题简单例子
- 冒泡排序算法的java实现
- 数组和指针的区别
- python框架-web2py
- Ubuntu PPA的介绍和使用
- 笔试题 -----找零钱
- UE4ShaderPluginDemo
- pku 1061
- 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑