首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

小弟我按孙鑫的视频教程运行他的一道例子,结果为什么跟他的不一样?

2012-03-25 
我按孙鑫的视频教程运行他的一道例子,结果为什么跟他的不一样???classMultiThread{publicstaticvoidmain(S

我按孙鑫的视频教程运行他的一道例子,结果为什么跟他的不一样???
class   MultiThread
{
public   static   void   main(String[]   args)
{
MyThread   mt   =   new   MyThread();
new   Thread(mt).start();
new   Thread(mt).start();
new   Thread(mt).start();
new   Thread(mt).start();
while   (true)
{
System.out.println( "main   :   "   +   Thread.currentThread().getName());
}
}
}

class   MyThread   implements   Runnable
{
int   index   =   0;
public   void   run()
{
while   (true)
{
System.out.println( "thread   :   "   +   Thread.currentThread().getName()   +   "   :   "   +   index++);
}
}
}

他说index的值是连续的,我看他运行的也是,但在我的机器上运行却不是连续,产生的进程对象顺序也不是连续的,为什么呢????

[解决办法]
你把while(true)改成,while(index <100),看一下一开始的几个值.
个人感觉是因为几个线程都取得了index的值,但只能有一个线程在屏幕上打印,其他的都被卡在out.println那了
[解决办法]
应该是连续的
[解决办法]
我运行的是无限循环.
[解决办法]
不应该是连续的,四个mt同名线程哪个先运行那个后运行完全是不可知的,所以打印出的结果不连续。这是我运行的结果:

thread : Thread-3 : 4519
thread : Thread-3 : 4520
thread : Thread-3 : 4521
thread : Thread-3 : 4522
thread : Thread-0 : 4499
thread : Thread-0 : 4524
thread : Thread-0 : 4525
thread : Thread-0 : 4526
thread : Thread-0 : 4527
thread : Thread-0 : 4528
thread : Thread-0 : 4529
thread : Thread-0 : 4530
main : main
main : main
main : main
main : main
main : main
main : main
main : main
main : main
thread : Thread-3 : 4531
thread : Thread-3 : 4533
thread : Thread-3 : 4534
thread : Thread-3 : 4535
thread : Thread-3 : 4536
thread : Thread-3 : 4537
thread : Thread-3 : 4538
thread : Thread-3 : 4539
thread : Thread-1 : 4523
thread : Thread-1 : 4540
thread : Thread-1 : 4541
thread : Thread-1 : 4542
thread : Thread-1 : 4543
thread : Thread-1 : 4544
thread : Thread-1 : 4545
thread : Thread-1 : 4546
thread : Thread-2 : 4515
thread : Thread-2 : 4548
thread : Thread-2 : 4549
thread : Thread-2 : 4550
thread : Thread-2 : 4551
thread : Thread-2 : 4552
thread : Thread-2 : 4553
thread : Thread-2 : 4554
thread : Thread-3 : 4547
thread : Thread-3 : 4556
thread : Thread-3 : 4557
thread : Thread-3 : 4558
thread : Thread-3 : 4559
thread : Thread-3 : 4560
thread : Thread-3 : 4561
thread : Thread-3 : 4562
main : main
main : main
main : main
main : main
main : main
main : main
main : main
main : main
thread : Thread-0 : 4532
thread : Thread-0 : 4565
thread : Thread-0 : 4566
thread : Thread-0 : 4567
thread : Thread-0 : 4568
thread : Thread-0 : 4569
thread : Thread-0 : 4570
thread : Thread-0 : 4571
thread : Thread-3 : 4564
thread : Thread-3 : 4572
thread : Thread-3 : 4573
thread : Thread-3 : 4574
thread : Thread-3 : 4575
thread : Thread-3 : 4576
thread : Thread-3 : 4577
thread : Thread-3 : 4578
thread : Thread-2 : 4563
thread : Thread-2 : 4580
thread : Thread-2 : 4581
thread : Thread-2 : 4582
thread : Thread-2 : 4583
thread : Thread-2 : 4584


thread : Thread-2 : 4585
thread : Thread-2 : 4586
thread : Thread-1 : 4555
thread : Thread-1 : 4588

无限循环。
[解决办法]
得说明一点,CPU在同一时间运行什么线程,我们是无法控制的,机子的不同或是系统的不同,线程的运行方式是会有所不同,何时运行什么线程是cpu在管理.所以在编程时要注意这个问题.在编写的程序里什么时候运行线程,运行什么线程,我们是无法控制的.
[解决办法]
你是不是看的是错误例子啊,没有线程同步就不一定连续了。
[解决办法]
synchronized

热点排行