黑马程序员技术交流社区

标题: 多线程问题,麻烦你几分钟帮我看下,在线等! [打印本页]

作者: lh5484826    时间: 2015-8-11 05:32
标题: 多线程问题,麻烦你几分钟帮我看下,在线等!
弄了两小时了,好急躁,麻烦大神帮我看下! 耽搁你几分钟时间帮我一下,谢谢了!
我不加synchronized运行的时候就是多线程,加了为什么就变成单线程了,怎么运行都是一个线程在走。
class RunInfo implements Runnable
{
                 private int tick = 100;
                 public void run()
                {
                           while(true)
                                    {  
                                          show();
                                    }
                 }
              public synchronized void show()
              {
                        if(tick>0)
                         {
                                    try{Thread.sleep(10);}catch(Exception e){}
                                     System.out.println(Thread.currentThread().getName()+"::"+tick--);   
                         }
              }
}

class  SynchronizedDemo
{
            public static void main(String[] args)
             {
                      RunInfo rf= new RunInfo();
                      Thread t1 = new Thread(rf);
                      Thread t2 = new Thread(rf);
                      Thread t3 = new Thread(rf);
                      Thread t4 = new Thread(rf);
                      t1.start();
                      t2.start();
                      t3.start();
                      t4.start();
  
             }
}




作者: 金逗逗    时间: 2015-8-11 07:33
你写的是多线程的,可以多个线程执行的,把票加到500试试能不能看到效果
作者: lh5484826    时间: 2015-8-11 08:19
金逗逗 发表于 2015-8-11 07:33
你写的是多线程的,可以多个线程执行的,把票加到500试试能不能看到效果

不行啊,我写1000运行还是那样,但是把synchronized去了运行就可以。
作者: 周博文    时间: 2015-8-11 08:29
Thread-0::80
Thread-0::79
Thread-0::78
Thread-0::77
Thread-0::76
Thread-3::75
Thread-3::74
Thread-3::73
Thread-3::72
Thread-3::71
上面是我运行你程序的一段结果,可以多线程运行。
可能是你电脑太好了吧,所以看不到效果,代码是没有问题的
作者: lh5484826    时间: 2015-8-11 08:35
周博文 发表于 2015-8-11 08:29
Thread-0::80
Thread-0::79
Thread-0::78

谢谢了,只要不是代码写的有问题就行。
作者: fmi110    时间: 2015-8-11 08:42
学习一下  哥们你什么配置电脑  都是秒运行玩啊{:3_54:}
作者: 金逗逗    时间: 2015-8-11 08:44
你可以把sleep时间加大点看看
作者: 传奇    时间: 2015-8-11 08:46
不懂,帮顶了
作者: lh5484826    时间: 2015-8-11 09:47
金逗逗 发表于 2015-8-11 08:44
你可以把sleep时间加大点看看

可能是哪里出BUG了。我调了5000还是一样,一直都是0线程在执行
Thread-0::3829
Thread-0::3828
Thread-0::3827
Thread-0::3826
Thread-0::3825
Thread-0::3824
Thread-0::3823
Thread-0::3822
作者: lh5484826    时间: 2015-8-11 09:49
fmi110 发表于 2015-8-11 08:42
学习一下  哥们你什么配置电脑  都是秒运行玩啊

可是我都写了sleep()了
作者: boboyuwu    时间: 2015-8-11 10:08
4个线程执行try都睡眠了,第一个睡眠结束唤醒的线程一下就把100个票卖光了,票设置多一些就能看见效果了
作者: boboyuwu    时间: 2015-8-11 10:10
你的原代码    是没问题的  线程3唤醒的时候执行了一次看到没,

1111.png (50.69 KB, 下载次数: 32)

1111.png

作者: lh5484826    时间: 2015-8-11 10:29
boboyuwu 发表于 2015-8-11 10:10
你的原代码    是没问题的  线程3唤醒的时候执行了一次看到没,

好的,谢谢了,代码没问题就行。
作者: 小丑    时间: 2015-8-11 10:35
lh5484826 发表于 2015-8-11 10:29
好的,谢谢了,代码没问题就行。

我之前也遇到过这种问题。。。忽然有一次出现了多个线程的名字就放心了。。。
作者: KALF    时间: 2015-8-11 10:36
电脑配置高的话是这样的。我的也是,要把数值加好大才能体现。有时候好大也看不出效果。要把CPU弄得比较高才显示。
作者: vipsong    时间: 2015-8-11 10:44
sleep时间调长一些,或者数值加大。你这得多好的电脑。biu一下就全完事了。
作者: lh5484826    时间: 2015-8-11 11:26
vipsong 发表于 2015-8-11 10:44
sleep时间调长一些,或者数值加大。你这得多好的电脑。biu一下就全完事了。 ...

终于好了,谢谢啊,我把sleep调到100终于出来了。       弄了一个晚上没好,纠结死了。睡觉。。
作者: lh5484826    时间: 2015-8-11 11:28
小丑 发表于 2015-8-11 10:35
我之前也遇到过这种问题。。。忽然有一次出现了多个线程的名字就放心了。。。 ...

嗯。解决了。我sleep()调的太低了。 谢谢指点。
作者: a348639336    时间: 2015-8-11 11:30
不是票少了就是sleep小了,看来配置太好也是个问题。。
作者: ℃葫芦    时间: 2015-8-11 19:29
  问题解决了我说个格式问题吧

try{Thread.sleep(10);}catch(Exception e){}

这个老师讲课时说了  为了偷懒这样写的,平时别这样写, 养成习惯了就糟了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2