黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
焦健
时间:
2012-12-24 14:21
标题:
多线程问题
本帖最后由 焦健 于 2012-12-25 12:11 编辑
使用eclipse运行几次多线程售票代码,本本热的几乎可以煎熟一锅鸡蛋,上代码
/*买票
* 有票数100张,分两个窗口售票
* 两个窗口操作同一个资源,出现县城安全问题,怎么解决呢,
*
* */
package cn.start;
class Piao implements Runnable{
private int x=100;//这里,毕老师说过静态后可以多线程共享数据,我试的不用静态也没有问题啊。这里有必要静态吗?
Object o=new Object();
public void run(){
while(true)
{
if(x>0){
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"----------"+x--);
}
}
}
}
public class Duo4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Piao p=new Piao();
new Thread(p).start();
new Thread(p).start();
}
}
对于不能自动结束的程序eclipse必须手动终止吗。
作者:
马志军
时间:
2012-12-25 08:12
x静态是指class Piao extends Thread的情况,创建多个piao对象,每个对象都有独立的x,所以要写成静态以便共享那100张票
但用implements方式时,只有一个Piao对象,作为参数传递给多线程,因为只有一个,所以用不着静态
作者:
黄锦成
时间:
2012-12-25 09:12
第一次运行,电脑死机了。然后看了代码,怪不得
我把你的代码修改了一下,供参考
/*买票
* 有票数100张,分两个窗口售票
* 两个窗口操作同一个资源,出现县城安全问题,怎么解决呢,
*
* */
class Piao implements Runnable{
private int x=100;//这里,毕老师说过静态后可以多线程共享数据,我试的不用静态也没有问题啊。这里有必要静态吗?
Object o=new Object();
public void run(){
boolean flag=true;//初始化为true,循环条件
while(flag)
{
synchronized(Piao.class)//同步
{
if(x>0){
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"----------"+x--);
}else{
flag=false;//没票的时候跳出
循环
}
}
}
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Piao p=new Piao();
new Thread(p).start();
new Thread(p).start();
}
}
作者:
焦健
时间:
2012-12-25 12:10
黄锦成 发表于 2012-12-25 09:12
第一次运行,电脑死机了。然后看了代码,怪不得
我把你的代码修改了一下,供参考
哦,我明白了,谢啦啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2