黑马程序员技术交流社区
标题:
多线程同步代码块,卖票例子求改代码
[打印本页]
作者:
刘 佳
时间:
2012-9-27 17:14
标题:
多线程同步代码块,卖票例子求改代码
本帖最后由 刘 佳 于 2012-9-27 18:12 编辑
多线程的卖票例子,
老师上课讲的是用while循环,我自己用的for循环,前面都还正常,但是讲到了同步代码块这里开始出问题
我想问下如果要解决多线程的安全问题,这个小代码里面可以用for循环吗?应该怎么改呢?
可以帮我改改这个程序吗?怎么改才能正常?//是我加了同步代码块时的语句,执行完我就崩溃了。。
/*
需求:一个简单的卖票程序。
*/
class ChuangKou implements Runnable//extends Thread
{
private int x=60;
//Object obj=new Object();
public void run()
{
//synchronized(obj)
//{
for(x=60;x>0;x--)
{
try{Thread.sleep(10);}
catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"卖票"+(x-1));
}
//}
}
}
class ThreadDemo1
{
public static void main(String[] args)
{
ChuangKou a=new ChuangKou();
Thread x=new Thread(a,"一窗口");
Thread y=new Thread(a,"二窗口");
Thread z=new Thread(a,"san窗口");
x.start();
y.start();
z.start();
}
}
作者:
刘 佳
时间:
2012-9-27 18:24
有人帮我解答一下么。。。
作者:
戎石锁
时间:
2012-9-27 19:58
刘 佳 发表于 2012-9-27 18:24
有人帮我解答一下么。。。
是不是 到了等待唤醒机制后才出现的问题
作者:
罗磊
时间:
2012-9-27 20:15
<p>/*
需求:一个简单的卖票程序。
*/
private int x = 600;
Object obj = new Object();</p><p> public void run() {</p><p> // for(x=60;x>0;x--)//
for (;;) {
synchronized (obj) {
if (x > 0) {
try {
Thread.sleep(10);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName() + "卖票"
+ x);
}
}
x--;
}</p><p> }//<font color="red">将操作的共享数据都放到锁里!</font>
</p>
复制代码
作者:
李润根
时间:
2012-9-27 21:58
/*
需求:一个简单的卖票程序。
*/
class ChuangKou implements Runnable// extends Thread
{
private int x;
Object obj = new Object();
public void run()
{
for (x = 60; x > 0; x--)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
}
synchronized (obj)
//把共享数据同步就可以了
{
if (x > 0)
//加多个判断
System.out.println(Thread.currentThread().getName()
+ ",卖票:" + (x));
}
}
}
}
class Test1
{
public static void main(String[] args)
{
ChuangKou a = new ChuangKou();
Thread x = new Thread(a, "一窗口");
Thread y = new Thread(a, "二窗口");
Thread z = new Thread(a, "san窗口");
x.start();
y.start();
z.start();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2