您的位置:首页 > 其它

同步例子-火车票

2017-02-22 12:31 162 查看
package com.pakage.ThreadAndRunnable;

public class Runnable_demo implements Runnable{
private int ticket=10;
public Runnable_demo(){
}
@Override
public void run() {
for(int i=0;i<20;i++){
if(this.ticket>0){
//休眠1s秒中,为了使效果更明显,否则可能出不了效果
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
this.sale();
}

}
}

public synchronized void sale(){
if(this.ticket>0){
System.out.println(Thread.currentThread().getName()+"号窗口卖出:"+this.ticket--+"号票");
}
}

public static void main(String args[]){
Runnable_demo demo=new Runnable_demo();
//基于火车票创建三个窗口
new Thread(demo,"a").start();
new Thread(demo,"b").start();
new Thread(demo,"c").start();
}

}


程序的输出结果为:



2、使用同步块修改上面的例子:

package com.pakage.ThreadAndRunnable;

public class Runnable_demo implements Runnable{
private int ticket=10;
public Runnable_demo(){
}
@Override
public void run() {
for(int i=0;i<20;i++){
synchronized(this){
if(this.ticket>0){
//休眠1s秒中,为了使效果更明显,否则可能出不了效果
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"号窗口卖出:"+this.ticket--+"号票");
}
}

}
}

public static void main(String args[]){
Runnable_demo demo=new Runnable_demo();
//基于火车票创建三个窗口
new Thread(demo,"a").start();
new Thread(demo,"b").start();
new Thread(demo,"c").start();
}

}


程序的输出结果:

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