class MultiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread(); mt.getThread().start();
mt.getThread().start();
mt.getThread().start();
mt.getThread().start();
while(true)
{
System.out.println("main:"+Thread.currentThread().getName());
}
}
}class MyThread
{
int index=0;
private class InnerThread extends Thread
{
public void run()
{
while(true)
{
System.out.println(Thread.currentThread().getName()+":"+index++);
}
}
}
Thread getThread()
{
return new InnerThread();
}}
看这个程序 孙鑫JAVA里运行出来的INDEX值是连续的,到我电脑上运行出来就是不连续的了,这个是对于4个线程是有4个INDEX值还是只有一个INDEX值的问题吧 难道JDK这部分改过了?
我觉得是同个mt对象start的线程,应该是连续的。假如jdk真改了,也得通知啊?
Thread-0:1
Thread-0:5
Thread-0:6
Thread-0:7
Thread-0:8
Thread-0:9
Thread-0:10
Thread-0:11
Thread-0:12
Thread-0:13
Thread-0:14
Thread-0:15
Thread-0:16
Thread-0:17
Thread-0:18
Thread-0:19
Thread-0:20
Thread-2:2
Thread-2:22
Thread-2:23
Thread-2:24
Thread-2:25
Thread-2:26
Thread-2:27
Thread-2:28
Thread-2:29
Thread-2:30
Thread-2:31
Thread-2:32
Thread-2:33
Thread-2:34
Thread-2:35
Thread-2:36
Thread-2:37
Thread-2:38
Thread-2:39
Thread-2:40
Thread-2:41
Thread-2:42
Thread-2:43
Thread-0:21
Thread-0:45
Thread-0:46
Thread-0:47
Thread-0:48
main:main
main:main
main:main
main:main
main:main截选部分结果
是连续的
看到的现象是CPU资源分配的问题
恩 我知道了 关键是 CPU快了以后 时间片多了,然后一行代码假设有十个操作,第一个线程执行了5个以后,还没来得及打印,其他线程可能已经开始打印了,然后中间的index就出现了 夹断的结果 ,可能那个第一个index=1的时候就要在index=5的后面才能被打印出来了。但是同时我觉得 机器慢的话,也应该会出现这种现象啊
index++;
s+=index;
System.out.println(s);因为线程的时间片是随机的,又因为线程没有同步,所以线程执行间可以在以上步骤上的任何一步切换线程,这产生的后果可能是多种多样的,有兴趣的可以接着分析
刚才为了观察方便,把打印的结果写进了一个文件里,结果写了30秒,文件变成700多兆,打印出了4000多万行,比较无语。