看了一个程序,动手改了一下可是却无法实现同步,如下:
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;
}
}
}
多谢大虾指导!!
解决方案 »
- A.java要用到B.java里的变量,应该怎么做?
- 把一个字符串去掉另外一个字符串?
- java JVM内存在什么地方可以设置?
- 跪求JAVA编写的俄罗斯方块游戏的论文或其资料!!!!!
- ***java画线问题,简单程序****
- 一个map缓存的调用的问题,请高手指点!高分等待!
- 关于三元操作符
- 请各位高手给点有关编写java application程序的建议(在线等待)
- 求救,关于gui
- swing面板刷新问题
- 大侠/高人/精英/坛主请进/新手:我想知道用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 单独拿出来做一个函数会不会好?
呵呵,个人理解