黑马程序员技术交流社区

标题: 听视频,老师说让线程停止首先想到join,让线程正常停止 [打印本页]

作者: itheima01    时间: 2013-5-26 16:02
标题: 听视频,老师说让线程停止首先想到join,让线程正常停止
本帖最后由 itheima01 于 2013-5-26 16:06 编辑

private void disconnect()  {
                //pw.close();
               
                try {
                        bConnected = false;
                        tr.join();//这里为什么要用join
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }finally{
                try {
                        dos.close();
                        dis.close();
                        sk.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                }
        }
让线程停止首先想到join,让线程正常停止不明白什么意思
作者: First    时间: 2013-5-26 18:11
请贴上完整的代码,
并标明视频是哪一天,及其标题
作者: 张旺达    时间: 2013-5-26 18:34
Thread提供了让一个线程等待另一个线程完成的方法——join()方法,当在某个程序执行中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。

这个方法通常由使用线程的程序调用,以将大问题划分成几个小问题,每个小问题分配一个线程,当所有的小问题都得到处理后,在调用主线程来进一步操作。
  1. public class JoinThread extends Thread
  2. {
  3. public JoinThread(String name)
  4. {
  5. super(name);
  6. }
  7. public void run()
  8. {
  9. for (int i=0; i<100; i++)
  10. {
  11. System.out.println(getName()+" "+i);
  12. }
  13. }
  14. public static void main(String[] args)throws Exception
  15. {
  16. new JoinThread("新线程").start();
  17. for (int i=0; i<100; i++)
  18. {
  19. if(i==20)
  20. {
  21. JoinThread jt = new JoinThread("被Join的线程");
  22. jt.start();
  23. jt.join();
  24. }
  25. System.out.println(Thread.currentThread().getName()+" "+i);
  26. }
  27. }
  28. }
复制代码

dfd.png (2.17 KB, 下载次数: 0)

1

1

作者: 张旺达    时间: 2013-5-26 18:36
当i==20的时候,启动了“被join的线程”,主线程一直处于阻塞状态,直到“被join的线程”执行完成,如上图,当然有时候执行会有一点误差。




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