黑马程序员技术交流社区
标题: 多线程练习,打印结果总是顺序的 [打印本页]
作者: 孙娜 时间: 2013-3-13 16:11
标题: 多线程练习,打印结果总是顺序的
本帖最后由 孙娜 于 2013-3-13 16:42 编辑
- class Test extends Thread
- {
- public void run()
- {
- for(int x=0;x<60;x++)
- {
- System.out.println(currentThread().getName()+"==="+x);
- }
- }
- }
- public class ThreadTest {
- public static void main(String[] args)
- {
- Test t1=new Test();
- Test t2=new Test();
- t1.start();
- t2.start();
- for(int x=0;x<60;x++)out.println("main..."+x);
- }
- }
- }
复制代码 用myeclipse运行上面的代码,每次运行结果都如下:
main...0
main...1
main...2
main...3
main...4
main...5
main...6
main...7
main...8
main...9
main...10
main...11
main...12
main...13
main...14
main...15
main...16
main...17
main...18
main...19
main...20
main...21
main...22
main...23
main...24
main...25
main...26
main...27
main...28
main...29
main...30
main...31
main...32
main...33
main...34
main...35
main...36
main...37
main...38
main...39
main...40
main...41
main...42
main...43
main...44
main...45
main...46
main...47
main...48
main...49
main...50
main...51
main...52
main...53
main...54
main...55
main...56
main...57
main...58
main...59
Thread-0===0
Thread-0===1
Thread-0===2
Thread-0===3
Thread-0===4
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-0===21
Thread-0===22
Thread-0===23
Thread-0===24
Thread-0===25
Thread-0===26
Thread-0===27
Thread-0===28
Thread-0===29
Thread-0===30
Thread-0===31
Thread-0===32
Thread-0===33
Thread-0===34
Thread-0===35
Thread-0===36
Thread-0===37
Thread-0===38
Thread-0===39
Thread-0===40
Thread-0===41
Thread-0===42
Thread-0===43
Thread-0===44
Thread-0===45
Thread-0===46
Thread-0===47
Thread-0===48
Thread-0===49
Thread-0===50
Thread-0===51
Thread-0===52
Thread-0===53
Thread-0===54
Thread-0===55
Thread-0===56
Thread-0===57
Thread-0===58
Thread-0===59
Thread-1===0
Thread-1===1
Thread-1===2
Thread-1===3
Thread-1===4
Thread-1===5
Thread-1===6
Thread-1===7
Thread-1===8
Thread-1===9
Thread-1===10
Thread-1===11
Thread-1===12
Thread-1===13
Thread-1===14
Thread-1===15
Thread-1===16
Thread-1===17
Thread-1===18
Thread-1===19
Thread-1===20
Thread-1===21
Thread-1===22
Thread-1===23
Thread-1===24
Thread-1===25
Thread-1===26
Thread-1===27
Thread-1===28
Thread-1===29
Thread-1===30
Thread-1===31
Thread-1===32
Thread-1===33
Thread-1===34
Thread-1===35
Thread-1===36
Thread-1===37
Thread-1===38
Thread-1===39
Thread-1===40
Thread-1===41
Thread-1===42
Thread-1===43
Thread-1===44
Thread-1===45
Thread-1===46
Thread-1===47
Thread-1===48
Thread-1===49
Thread-1===50
Thread-1===51
Thread-1===52
Thread-1===53
Thread-1===54
Thread-1===55
Thread-1===56
Thread-1===57
Thread-1===58
Thread-1===59
两个线程不应该跟main抢资源吗,怎么我每次打印结果都是顺序下来了
作者: 猫腻 时间: 2013-3-13 16:13
楼主,代码请用编辑功能里的插入代码。
作者: 孙娜 时间: 2013-3-13 16:16
上面的代码是用编辑功能里面的插入代码插入的,下面的打印结果是自己复制的
作者: 傅宇 时间: 2013-3-13 16:22
当线程池中线程都具有相同的优先级,调度程序的JVM自由选择线程。因为你CPU在两个线程之间快速切换之前,当前线程已经完成了循环,如果想看出线程之间交替的效果可以使用sleep()或wait()使线程阻塞,我帮你代码改了一下,通过sleep()方法让线程阻塞一段时间,就能看出切换的效果了。- class Test extends Thread {
- public void run() {
- for (int x = 0; x < 60; x++) {
- System.out.println(currentThread().getName() + "===" + x);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- public class ThreadTest {
- public static void main(String[] args) {
- Test t1 = new Test();
- Test t2 = new Test();
- t1.start();
- t2.start();
- for (int x = 0; x < 60; x++) {
- System.out.println("main..." + x);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
复制代码
作者: 孙娜 时间: 2013-3-13 16:32
傅宇 发表于 2013-3-13 16:22
当线程池中线程都具有相同的优先级,调度程序的JVM自由选择线程。因为你CPU在两个线程之间快速切换之前,当 ...
试了一下,可以看到切换的效果了。视频里面就是我那么写的,但是视频里没有用sleep就有切换的效果。
作者: 傅宇 时间: 2013-3-13 16:33
孙娜 发表于 2013-3-13 16:32
试了一下,可以看到切换的效果了。视频里面就是我那么写的,但是视频里没有用sleep就有切换的效果。 ...
那可能是老师录视频时候用的机器太老
作者: 孙娜 时间: 2013-3-13 16:40
傅宇 发表于 2013-3-13 16:33
那可能是老师录视频时候用的机器太老
哦~这样啊。谢谢啦:)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |