黑马程序员技术交流社区
标题:
线程问题
[打印本页]
作者:
何超
时间:
2013-12-30 18:53
标题:
线程问题
本帖最后由 何超 于 2013-12-31 11:51 编辑
public class Thread extends java.lang.Thread {
static int ticket=100;
boolean flag=true;
public void run(){
while(flag){
ticket--;
System.out.println(Thread.currentThread()+"余票为"+ticket);
if(ticket==0)
flag=false;
}
}
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
Thread t1=new Thread();
Thread t2=new Thread();
t1.start();
t2.start();
t1.join();
System.out.println("OVER");
}
}
复制代码
最简单的一个线程,可是我看到运行结果有一个疑问,运行结果中有这样一项
Thread[Thread-1,5,main]余票为54
Thread[Thread-0,5,main]余票为85
Thread[Thread-0,5,main]余票为52
Thread[Thread-0,5,main]余票为1
Thread[Thread-0,5,main]余票为0
OVER
Thread[Thread-1,5,main]余票为53
1:ticket是静态变量为什么中间会出现85?而不是53,静态变量是全局共享,为什么突然从54变成85又变成52
2: 53为什么是在最后才出现?最后有一个输出语句我可以理解,但是不能理解的是为什么偏偏是上面对应的53在这里出现。
突然感觉上个月自学的全吐出来了{:soso_e127:}
作者:
何超
时间:
2013-12-30 18:54
忘了说 ticket 和 flag 我的设置是
static int ticket=100;
boolean flag=true;
作者:
75100313
时间:
2013-12-30 20:22
本帖最后由 75100313 于 2013-12-30 20:24 编辑
{:soso_e113:}我也不是很懂 但是我想把我的想法跟楼主分享一下 共同研究
首先 线程本来随机性就很强
针对于第一个问题 我不知道怎么回答你 静态变量 只是全局都使用这一个变量 你多运行几次
还会发现 出售相同的票 这都是源于线程的随机性 不能确定哪个线程先抢到资源 就一定先打印剩余票量
第一种 就是抢到票的没输出 结果最后输出
第二种 就是票已经卖到85张 他抢到了 就先输出了!
针对这种随机性 线程 用了 锁 Lock 和 synchronized 来控制
具体怎么用我就不说了 老师的视频说得比我好 呵呵
作者:
taoge
时间:
2013-12-30 20:25
少年,你的join()方法呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2