public class Multithreading { public static void main(String[] args)
{
Test he=new Test();
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
}
}
class Test implements Runnable
{
int top=1;
public void run()
{
while(top>0)
{
try{
Thread.sleep(1);
}catch(Exception e)
{}
System.out.println(Thread.currentThread().getName().toString()+"is running:top="+top--);
}
}
}
为什么当top取值为1时,线程按顺序执行,top取其他值时,没有这种现象?
{
Test he=new Test();
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
new Thread(he).start() ;
}
}
class Test implements Runnable
{
int top=1;
public void run()
{
while(top>0)
{
try{
Thread.sleep(1);
}catch(Exception e)
{}
System.out.println(Thread.currentThread().getName().toString()+"is running:top="+top--);
}
}
}
为什么当top取值为1时,线程按顺序执行,top取其他值时,没有这种现象?
解决方案 »
- 求解:Hashtable<K,V>、ConcurrentHashMap<K,V>和ConcurrentSkipList<K,V>三者的区别!!!
- 帮写一个java程序
- 数据类型
- 求教java中一个方法覆盖的问题!!!
- 关于一个IPv4数据报转换成IPv6的模拟程序
- asp.net(C#)报ConnectionString 属性尚未初始化。这个错
- 在JTree控件中,怎样既能用击鼠标左键选中一个节点,又能通过点击鼠标右键选中一个节点;
- ***散分求助--如何是jTable的某一列数据隐藏invisible,但是在数据还可以取出来?
- 请教,jdbTable异常
- 请问如何设置JDialog,JFrame的宽度?
- ActiveX也可以跨平台使用,并且没有语言的限制,这是比Applet强的地方,但与Applet比有哪些缺点呢?
- 自己的想法编出的第一个程序,有点问题总是想不通。。
Thread-0is running:top=100
Thread-1is running:top=99
Thread-2is running:top=98
Thread-3is running:top=97
Thread-4is running:top=96
Thread-5is running:top=95
Thread-6is running:top=94
Thread-7is running:top=93
Thread-0is running:top=92
Thread-1is running:top=91
Thread-2is running:top=90
Thread-3is running:top=89
Thread-4is running:top=88
Thread-5is running:top=87
Thread-6is running:top=86
Thread-7is running:top=85
Thread-0is running:top=84
Thread-1is running:top=83
Thread-2is running:top=82
Thread-3is running:top=81
Thread-4is running:top=80
Thread-5is running:top=79
Thread-6is running:top=78
Thread-7is running:top=77
Thread-0is running:top=76
Thread-1is running:top=75
Thread-2is running:top=74
Thread-3is running:top=73
Thread-4is running:top=72
Thread-5is running:top=71
Thread-6is running:top=70
Thread-7is running:top=69
Thread-0is running:top=68
Thread-1is running:top=67
Thread-2is running:top=66
Thread-3is running:top=65
Thread-4is running:top=64
Thread-5is running:top=63
Thread-6is running:top=62
Thread-7is running:top=61
Thread-0is running:top=60
Thread-1is running:top=59
Thread-2is running:top=58
Thread-3is running:top=57
Thread-4is running:top=56
Thread-5is running:top=55
Thread-6is running:top=54
Thread-7is running:top=53
Thread-0is running:top=52
Thread-1is running:top=51
Thread-2is running:top=50
Thread-3is running:top=49
Thread-4is running:top=48
Thread-5is running:top=47
Thread-6is running:top=46
Thread-7is running:top=45
Thread-0is running:top=44
Thread-1is running:top=43
Thread-2is running:top=42
Thread-3is running:top=41
Thread-4is running:top=40
Thread-5is running:top=39
Thread-6is running:top=38
Thread-7is running:top=37
Thread-0is running:top=36
Thread-1is running:top=35
Thread-2is running:top=34
Thread-3is running:top=33
Thread-4is running:top=32
Thread-5is running:top=31
Thread-6is running:top=30
Thread-7is running:top=29
Thread-0is running:top=28
Thread-1is running:top=27
Thread-2is running:top=26
Thread-3is running:top=25
Thread-4is running:top=24
Thread-5is running:top=23
Thread-6is running:top=22
Thread-7is running:top=21
Thread-0is running:top=20
Thread-1is running:top=19
Thread-2is running:top=18
Thread-3is running:top=17
Thread-4is running:top=16
Thread-5is running:top=15
Thread-6is running:top=14
Thread-7is running:top=13
Thread-0is running:top=12
Thread-1is running:top=11
Thread-2is running:top=10
Thread-3is running:top=9
Thread-4is running:top=8
Thread-5is running:top=7
Thread-6is running:top=6
Thread-7is running:top=5
Thread-0is running:top=4
Thread-1is running:top=3
Thread-2is running:top=2
Thread-3is running:top=1
Thread-4is running:top=0
Thread-5is running:top=-1
Thread-6is running:top=-2
Thread-7is running:top=-3
Thread-0is running:top=-4
Thread-1is running:top=-5
Thread-2is running:top=-6
因此,我们不应该假定 线程的执行顺序。Thread-0is running:top=1
Thread-1is running:top=0
Thread-3is running:top=-2
Thread-2is running:top=-1
请按任意键继续. . .
Thread-1is running:top=0
Thread-3is running:top=-2
Thread-4is running:top=-3
Thread-2is running:top=-1
请按任意键继续. . .我运行约30次才又出现了一次。大家自己可以试。
谢了,我会尽快找到那本书
(1)永远不要预测线程执行的顺序,即使指定了优先级时也是如此,但保证运行次数多或运行时间长,线程的运行还是符合一定的规律;
(2)不要向楼住那样创建线程对象并启动它们,Test he=new Test();
new Thread(he).start() ;
new Thread(he).start() ;
因为这样在执行第一 个new Thread(he).start()时,已经通知虚拟机又有了新的线程加入运行队列,可这样会影响第二个new Thread(he),因为可能在执行构造函数的过程中已经start()的那个线程会插入执行,依次类推,到最好一个线程的对象还没有创建好时,前面的几个线程都已经运行好久了,这样与预期的结果有所不同是正常的;
线程的调用顺序
是不可重现的
如果你现在CPU很闲的话是
来一个处理一个
看起来是 顺序
如果很忙的话就要看操作系统的调度算法
天知道是什么顺序是静安寺不是道明寺,是源程序不是言承旭;是在静安寺写源程序,不是在流星花园看F4。
去预测 线程运行执行顺序 是个 没意义 的事情
如果有特殊需要的话用临界区 同步吧是静安寺不是道明寺,是源程序不是言承旭;是在静安寺写源程序,不是在流星花园看F4。