看了一个程序,动手改了一下可是却无法实现同步,如下:
class SellTickets{
public static void main(String[] args)
{
Sell s1=new Sell();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
}
}class Sell implements Runnable
{
int i=100;
public void run()
{
String str="yes";//按道理应该不会同步,可是却能实现????奇怪?下面换一下改为:String str="yes"+i后不能同步?两者有区别吗?
while(true)
{
synchronized(str)
{
if(i>0)
{
Thread.yield();
System.out.println(Thread.currentThread().getName()+"sell tickets: "+i--);
}
if(i<=0)
break;
}
}
}
多谢大虾指导!!
class SellTickets{
public static void main(String[] args)
{
Sell s1=new Sell();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
new Thread(s1).start();
}
}class Sell implements Runnable
{
int i=100;
public void run()
{
String str="yes";//按道理应该不会同步,可是却能实现????奇怪?下面换一下改为:String str="yes"+i后不能同步?两者有区别吗?
while(true)
{
synchronized(str)
{
if(i>0)
{
Thread.yield();
System.out.println(Thread.currentThread().getName()+"sell tickets: "+i--);
}
if(i<=0)
break;
}
}
}
多谢大虾指导!!
解决方案 »
- eclispe中Date作为类使用时该怎么用
- 请教高手关于SMSLIB发短息的问题!
- 学生的信息存储在文件中
- 求课程设计题目
- 我不知道怎么读数组里数,然后再逆序输出!
- 各位大哥,有没有下载java编译器的网址啊??
- jbuilder7问题!!!???
- 有感而发!!!
- Applet的一个小问题,非常感谢!
- 有点晕了,这儿为什么有俩"\\"
- 大侠/高人/精英/坛主请进/新手:我想知道用Java Applet能不能做类似于外汇排价功能.实时显示数据库中的数据我是用b/s做的 Thank You
- [求助]Window下,已经安装了Oracle 9i,现在想学java的Oracle编程,应该用什么工具?
{
if(i>0)
{
Thread.yield();
System.out.println(Thread.currentThread().getName()+"sell tickets: "+i--);
}
if(i<=0)
break;
}把synchronize 单独拿出来做一个函数会不会好?
呵呵,个人理解