您的位置:首页 > 其它

线程同步问题,线程上锁---多线程“卖票”实例

2009-09-17 16:56 253 查看
线程1执行,其它三个上锁。

package demo;

public class SellTickets implements Runnable{

private int tickets=100;

public void run() {

int count=0;

while (true)
{
//上锁
synchronized(this){
if (tickets>0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
count=100-tickets;
System.out.println("当前票数是:"+tickets+"售出"+count
+"线程名:"+Thread.currentThread().getName());
tickets--;
}else{
break;
}
}
}
}

public static void main(String[] args) {

SellTickets r=new SellTickets();
Thread t1=new Thread(r,"t1");
t1.start();

Thread t2=new Thread(r,"t2");
t2.start();

Thread t3=new Thread(r,"t3");
t3.start();

Thread t4=new Thread(r,"t4");
t4.start();
}
}


程序运行结果:

当前票数是:100售出0线程名:t1
当前票数是:99售出1线程名:t2
当前票数是:98售出2线程名:t3
当前票数是:97售出3线程名:t4
当前票数是:96售出4线程名:t1
当前票数是:95售出5线程名:t2
当前票数是:94售出6线程名:t3
当前票数是:93售出7线程名:t4
当前票数是:92售出8线程名:t1
当前票数是:91售出9线程名:t2
当前票数是:90售出10线程名:t3
当前票数是:89售出11线程名:t4
当前票数是:88售出12线程名:t1
当前票数是:87售出13线程名:t2
当前票数是:86售出14线程名:t3
当前票数是:85售出15线程名:t4
当前票数是:84售出16线程名:t1
当前票数是:83售出17线程名:t2
当前票数是:82售出18线程名:t3
当前票数是:81售出19线程名:t4
当前票数是:80售出20线程名:t1
当前票数是:79售出21线程名:t2
当前票数是:78售出22线程名:t3
当前票数是:77售出23线程名:t4
当前票数是:76售出24线程名:t1
当前票数是:75售出25线程名:t2
当前票数是:74售出26线程名:t3
当前票数是:73售出27线程名:t4

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