A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙娜 中级黑马   /  2013-3-13 16:11  /  1553 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙娜 于 2013-3-13 16:42 编辑
  1. class Test extends Thread
  2. {
  3. public void run()
  4. {
  5. for(int x=0;x<60;x++)
  6. {
  7. System.out.println(currentThread().getName()+"==="+x);
  8. }
  9. }
  10. }
  11. public class ThreadTest {
  12. public static void main(String[] args)
  13. {
  14. Test t1=new Test();
  15. Test t2=new Test();
  16. t1.start();
  17. t2.start();
  18. for(int x=0;x<60;x++)out.println("main..."+x);
  19. }
  20. }

  21. }
复制代码
用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抢资源吗,怎么我每次打印结果都是顺序下来了

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

6 个回复

倒序浏览
楼主,代码请用编辑功能里的插入代码。
回复 使用道具 举报
上面的代码是用编辑功能里面的插入代码插入的,下面的打印结果是自己复制的
回复 使用道具 举报
当线程池中线程都具有相同的优先级,调度程序的JVM自由选择线程。因为你CPU在两个线程之间快速切换之前,当前线程已经完成了循环,如果想看出线程之间交替的效果可以使用sleep()或wait()使线程阻塞,我帮你代码改了一下,通过sleep()方法让线程阻塞一段时间,就能看出切换的效果了。
  1. class Test extends Thread {
  2.         public void run() {
  3.                 for (int x = 0; x < 60; x++) {
  4.                         System.out.println(currentThread().getName() + "===" + x);
  5.                         try {
  6.                                 Thread.sleep(1000);
  7.                         } catch (InterruptedException e) {
  8.                                 e.printStackTrace();
  9.                         }
  10.                 }
  11.         }
  12. }

  13. public class ThreadTest {
  14.         public static void main(String[] args) {
  15.                 Test t1 = new Test();
  16.                 Test t2 = new Test();
  17.                 t1.start();
  18.                 t2.start();
  19.                 for (int x = 0; x < 60; x++) {
  20.                         System.out.println("main..." + x);
  21.                         try {
  22.                                 Thread.sleep(1000);
  23.                         } catch (InterruptedException e) {
  24.                                 e.printStackTrace();
  25.                         }
  26.                 }
  27.         }

  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
傅宇 发表于 2013-3-13 16:22
当线程池中线程都具有相同的优先级,调度程序的JVM自由选择线程。因为你CPU在两个线程之间快速切换之前,当 ...

试了一下,可以看到切换的效果了。视频里面就是我那么写的,但是视频里没有用sleep就有切换的效果。
回复 使用道具 举报
孙娜 发表于 2013-3-13 16:32
试了一下,可以看到切换的效果了。视频里面就是我那么写的,但是视频里没有用sleep就有切换的效果。 ...

那可能是老师录视频时候用的机器太老
回复 使用道具 举报
孙娜 中级黑马 2013-3-13 16:40:38
7#
傅宇 发表于 2013-3-13 16:33
那可能是老师录视频时候用的机器太老

哦~这样啊。谢谢啦:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马