Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
话题被移动
该话题已被移动 - littledeer1974 , 2004-10-29 10:36
如果您尚不清楚该话题被移动的原因,请参考论坛规则以及本版公告或者联系本版版主。
作者 求教:多线程同步代码块和同步方法之间实现同步的问题!
drxjava





发贴: 21
积分: 0
于 2004-10-24 10:24 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
是两段差不多的代码,都是在多线程同步中的同步代码块和同步方法之间实现同步的代码。
可是代码1能够实现同步代码块和同步方法之间的同步,并且能够启动两个线程。
但是,代码2却不能够启动两个线程,只有第一个线程启动了呀,并且他执行的只是同步方法中的代码,没有执行同步代码块中的代码。
为什么代码2中的第二个线程不能够启动呢?我都做了对比没有发现原因,只有请高手给我这个菜鸟指点一下吧!谢谢拉!:)
代码1:
class ThreadD1
{
public static void main(String [] args)
{
TestThread tt=new TestThread();
new Thread(tt).start();
try{Thread.sleep(10);}catch(Exception e){}
tt.str=new String("method");
new Thread(tt).start();
}
}
class TestThread implements Runnable
{
int tickets = 100;
String str = new String("");
public void run()
{
if(str.equals("method"))
{
while(true)
{
synchronized(this)
{
if(tickets>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"is selling ticket"+tickets--);
}
}
}
}
else
{
  while (true)
{
sale();
}

}
}
public synchronized void sale()
{
if(tickets>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.print("sale():");
System.out.println(Thread.currentThread().getName()+"is selling ticket"+tickets--);
}
}
}

代码2:
class ThreadDo1
{
public static void main(String [] args)
{
     TestThread tt=new TestThread();
     new Thread(tt).start();
     try{Thread.sleep(1);}
     catch(Exception e)
     {
       System.out.println("Note:Exception!!");
     }
     tt.str=new String("drx");
     new Thread(tt).start();
}
}
class TestThread implements Runnable
{
int tickets=100;
String str=new String("");
public void run()
{
if(str.equals("drx"))
{
  while(true)
{
  synchronized (this)
{
if(tickets>0)
{
   try{Thread.sleep(10);}catch(Exception e){}
   System.out.print("成功了!");
   System.out.println(Thread.currentThread().getName()+"is selling tickets"+tickets--);
}
}
}
}
else
{
   while(true)
   {
sale();
}
}
}
public synchronized void sale()
{
while(true)
if(tickets>0)
{
     try{Thread.sleep(10);}catch(Exception e){}
     System.out.print("sale()haha");
     System.out.println(Thread.currentThread().getName()+"is selling tickets"+tickets--);
}
}
}




基于WEB的J2EE报表解决方案集锦

话题树型展开
人气 标题 作者 字数 发贴时间
7947 求教:多线程同步代码块和同步方法之间实现同步的问题! drxjava 2734 2004-10-24 10:24
6301 Re:求教:多线程同步代码块和同步方法之间实现同步的问题! archonLing 969 2004-10-24 12:01
6232 Re:求教:多线程同步代码块和同步方法之间实现同步的问题! drxjava 43 2004-10-24 13:45
6306 Re:求教:多线程同步代码块和同步方法之间实现同步的问题! drxjava 450 2004-10-24 17:23
5938 Re:求教:多线程同步代码块和同步方法之间实现同步的问题! archonLing 472 2004-10-24 21:53
6618 Re:求教:多线程同步代码块和同步方法之间实现同步的问题! drxjava 34 2004-10-25 12:20

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923