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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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,让线程正常停止不明白什么意思

3 个回复

正序浏览
当i==20的时候,启动了“被join的线程”,主线程一直处于阻塞状态,直到“被join的线程”执行完成,如上图,当然有时候执行会有一点误差。
回复 使用道具 举报
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
回复 使用道具 举报
请贴上完整的代码,
并标明视频是哪一天,及其标题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马