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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴光新 黑马帝   /  2013-6-4 07:11  /  1301 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Jiewin 于 2013-6-4 22:57 编辑
  1. class StopThread implements Runnable
  2. {
  3. private boolean flag = true;
  4. public void run()
  5. {
  6. while(flag)
  7. {
  8. System.out.println(Thread.currentThread().getName()+"....run");
  9. }
  10. }
  11. public void changeFlag()
  12. {
  13. flag = false;
  14. }
  15. }

  16. class StopThreadDemo
  17. {
  18. public static void main(String[] args)
  19. {
  20. StopThread st = new StopThread();

  21. Thread t1 = new Thread(st);
  22. Thread t2 = new Thread(st);

  23. t1.start();
  24. t2.start();

  25. int num = 0;
  26. while(true)
  27. {
  28. if(num++ ==60)
  29. {
  30. st.changeFlag();
  31. break;
  32. }
  33. System.out.println(Thread.currentThread().getName()+"...."+num);
  34. }
  35. }
  36. }
复制代码
视频:第12天-07-多线程(停止线程)

和老师一摸一样的代码,老师运行的结果如下图1,而我运行的是图2那样的结果!多次运行也是这样,代码有错吗?

图1                                   
   


图2


还有好多同样运行结果异常的:比如说死锁,老师设置1000,到800左右就锁了,我设置了10000,完全结束了都没锁,运行几次也没锁!!!哎~




评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
线程的测试跟机器有很大关系的,默认每个线程执行的机会均等,除非在线程里面人为插入控制代码,比方说join()、wait()、notify()等,看楼主的运行结果,只能说楼主您的main()方法太不给力了,老是抢不到CPU的使用权那。

点评

明白了,几率害死人  发表于 2013-6-4 22:52

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
哥们,你确定老师的程序是这么写的???貌似这个地方用的是interrupt吧。。。
回复 使用道具 举报
你这这段代码是为了练习线程实现的第二种方法implements Punnable。你看到有三个线程说明你的效果已经有了。而你说你的运行结果和毕老师的
不一样,这个不要在纠结了。你楼下 liujkh123就说的很清楚了线程的测试跟机器有很大关系的。
而你说的死锁是线程嵌套时才发生吧?你上面的代码是不会发生死锁的,
回复 使用道具 举报
本帖最后由 Jiewin 于 2013-6-4 22:51 编辑
郭天龚 发表于 2013-6-4 19:51
你这这段代码是为了练习线程实现的第二种方法implements Punnable。你看到有三个线程说明你的效果已经有了 ...

恩,我明白了
回复 使用道具 举报
本帖最后由 Jiewin 于 2013-6-4 22:52 编辑
袁杰 发表于 2013-6-4 13:21
哥们,你确定老师的程序是这么写的???貌似这个地方用的是interrupt吧。。。 ...


几率害死人,我明白了
回复 使用道具 举报
可能因为老师运行代码后强调了代码的结果是先执行主线程,并没有说明那是几率问题,所以我一直去找原因!原来和liujkh123 说的一样! 已经解决问题了,结贴
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马