黑马程序员技术交流社区

标题: 关于停止线程 [打印本页]

作者: 吴光新    时间: 2013-6-4 07:11
标题: 关于停止线程
本帖最后由 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,完全结束了都没锁,运行几次也没锁!!!哎~





作者: liujkh123    时间: 2013-6-4 10:35
线程的测试跟机器有很大关系的,默认每个线程执行的机会均等,除非在线程里面人为插入控制代码,比方说join()、wait()、notify()等,看楼主的运行结果,只能说楼主您的main()方法太不给力了,老是抢不到CPU的使用权那。
作者: 袁杰    时间: 2013-6-4 13:21
哥们,你确定老师的程序是这么写的???貌似这个地方用的是interrupt吧。。。
作者: 郭天龚    时间: 2013-6-4 19:51
你这这段代码是为了练习线程实现的第二种方法implements Punnable。你看到有三个线程说明你的效果已经有了。而你说你的运行结果和毕老师的
不一样,这个不要在纠结了。你楼下 liujkh123就说的很清楚了线程的测试跟机器有很大关系的。
而你说的死锁是线程嵌套时才发生吧?你上面的代码是不会发生死锁的,
作者: 吴光新    时间: 2013-6-4 22:35
本帖最后由 Jiewin 于 2013-6-4 22:51 编辑
郭天龚 发表于 2013-6-4 19:51
你这这段代码是为了练习线程实现的第二种方法implements Punnable。你看到有三个线程说明你的效果已经有了 ...

恩,我明白了
作者: 吴光新    时间: 2013-6-4 22:37
本帖最后由 Jiewin 于 2013-6-4 22:52 编辑
袁杰 发表于 2013-6-4 13:21
哥们,你确定老师的程序是这么写的???貌似这个地方用的是interrupt吧。。。 ...


几率害死人,我明白了
作者: 吴光新    时间: 2013-6-4 22:56
可能因为老师运行代码后强调了代码的结果是先执行主线程,并没有说明那是几率问题,所以我一直去找原因!原来和liujkh123 说的一样! 已经解决问题了,结贴




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2