黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: 刘晓    时间: 2013-6-13 16:06
标题: 多线程问题
本帖最后由 刘晓 于 2013-6-14 08:44 编辑

为什么在Tick类中的ticket变量加了静态修饰符后,下面的线程都执行了;在没有加之前,只有一个线程执行?
  1. package text;
  2. class Tick extends Thread
  3. {
  4.         private static int ticket=20;
  5.         public void run()
  6.         {
  7.                 while(true)
  8.                 {
  9.                         if(ticket>0)
  10.                         {
  11.                                 System.out.println(currentThread().getName()+"....sale..."+ticket--);
  12.                         }
  13.                 }
  14.         }
  15.         }
  16. public class Text1
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Tick t1=new Tick();
  21.                 Tick t2=new Tick();
  22.                 Tick t3=new Tick();
  23.                 t1.start();
  24.                 t2.start();
  25.                 t3.start();               
  26.         }
  27. }
复制代码

作者: 张承富    时间: 2013-6-13 16:34
都会执行,跟static无关,可能是你赋值太小了,用100试试
作者: 曾林魁    时间: 2013-6-13 16:35
              Tick t1=new Tick();
                Tick t2=new Tick();
                Tick t3=new Tick();
                t1.start();
                t2.start();
                t3.start();  
在你没加static的时候,你创建的三个进程之间没有必然关系,但是当你加了static关键字之后,每个进程都
操作同一个Ticket变量,至于你说的没加static关键字就是有一个线程启动其实是假象,你把变量的初始值
变大一点你就会看到每个线程都启动动了  ,要不你就在dos下运行你也会看到结果。           

作者: 江南雨    时间: 2013-6-13 16:38
你加了static就是所有tick类对象共享的成员变量!!如果没有加就是每new一个tick
对象就有一个拥有成员变量ticket!!不管你加不加,你这的都是线程不安全的!!
作者: 张承富    时间: 2013-6-13 16:50
还有一个不是答案的建议,你用text ,我想你是想起测试名字,测试是test,开发代码细心很重要哦
作者: 刘晓    时间: 2013-6-13 19:10
张承富 发表于 2013-6-13 16:50
还有一个不是答案的建议,你用text ,我想你是想起测试名字,测试是test,开发代码细心很重要哦 ...

呵呵,这都被你发现了,以后定细心。
作者: 刘晓    时间: 2013-6-13 19:11
张承富 发表于 2013-6-13 16:34
都会执行,跟static无关,可能是你赋值太小了,用100试试

和赋值小没有关系,你可以试试。
作者: 刘晓    时间: 2013-6-13 19:14
江南雨 发表于 2013-6-13 16:38
你加了static就是所有tick类对象共享的成员变量!!如果没有加就是每new一个tick
对象就有一个拥有成员变量 ...

嗯,是的,不管加不加,这线程都是不安全的。想要安全,需要synchronized(对象){};
作者: 孙百鑫    时间: 2013-6-14 04:56
楼主您好.如果问题解决的话,请将问题改成已解决哦~
作者: 刘晓    时间: 2013-6-14 08:44
孙百鑫 发表于 2013-6-14 04:56
楼主您好.如果问题解决的话,请将问题改成已解决哦~

你什么时候成为版主的?:dizzy:
作者: 孙百鑫    时间: 2013-6-14 08:49
刘晓 发表于 2013-6-14 08:44
你什么时候成为版主的?

大约在冬季哈哈
作者: 刘晓    时间: 2013-6-14 08:52
孙百鑫 发表于 2013-6-14 08:49
大约在冬季哈哈

好吧,这个夏天有点冷。。。




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