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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁永志 中级黑马   /  2013-7-15 23:03  /  1098 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-16 21:16 编辑
  1. class Runn1 implements Runnable
  2. {
  3. public void run()
  4. {
  5. for (int i = 0;i<100 ;i++ )
  6. {
  7. System.out.print("*");
  8. Thread.yield();
  9. }
  10. }
  11. }
  12. class Runn2 implements Runnable
  13. {
  14. public void run()
  15. {
  16. for (int i = 0;i<100 ;i++ )
  17. {
  18. System.out.print("+");
  19. Thread.yield();
  20. }
  21. }
  22. }
  23. public class RunnTest2
  24. {
  25. public static void main(String [] args)
  26. {
  27. Runn1 r1 = new Runn1();
  28. Runn2 r2 = new Runn2();
  29. Thread t1 = new Thread(r1);
  30. Thread t2 = new Thread(r2);
  31. t1.start();
  32. t2.start();
  33. }
  34. }
复制代码
为什么运行的结果不是*+*+ 这样有规律的 而运行的结果为什么是没有规律的?

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

4 个回复

倒序浏览
System.out.print("+");
Thread.yield();

System.out.print("*");
Thread.yield();
没有保证是一起执行的,有可能是执行了这一句System.out.print("+");后,被另一个线程抢占了CPU,执行System.out.print("*"); Thread.yield();
  另一个线程获得执行权,继续执行;System.out.print("*"); 这样就 +**,这样的字符串,所以不是交替执行的,可以考虑用锁来限制。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
这个是交替运行吧..  表示是说 一个方法执行完的结果,然后执行到yield的时候, 线程会被放弃掉 接下去由另外一个线程执行
回复 使用道具 举报
可以考虑在方法哪里加个synchronized保证执行过程中不会执行其他线程上!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马