Collection bt = new Collection(); //Collection extends Thread
bt.setBean(bean);
bt.setTextArea(textArea);
bt.setUid(uid);
bt.setUser(author); bt.start(); try {
bt.join();
} catch (InterruptedException e) {
e.printStackTrace();
}我想知道 bt.join() 是吧当前的Collection线程阻塞 还是把整个程序都给阻塞了呢

解决方案 »

  1.   

    学java4个月,貌似bt.join()是保证当前bt线程必须要执行完毕才能让出给下一个线程。所以阻塞当然是整个程序了。
    API:
    join
    public final void join()
                    throws InterruptedException等待该线程终止。 抛出: 
    InterruptedException - 如果另一个线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。
      

  2.   

    bt.join()是阻塞所有线程,只有当bt类型的线程执行完了其他线程才会有机会执行。如果遇到io将一直阻塞。
      

  3.   

    bt.join()是把当前线程阻塞.当程序执行到bt.join()时,系统会先执行bt这个线程,一直到bt这个线程完全执行完后再执行当前线程.
      

  4.   

    private void Start(final File[] lists, final Vector author, final Vector uid) {
    Thread t = new Thread() {
    public void run() {
    for (int i = 0; i < lists.length; i++) {
    Bean bean = Management.getInstance_Rule().getBean(lists[i].getAbsolutePath());
    list.setSelectedIndex(i);
    if (bean.getState().equals("1")) { ShowMsg("[+] : 开始采集 " + lists[i].getName().substring(0, lists[i].getName().indexOf("p")).trim().replaceAll("\\.", ""));
    Collection bt = new Collection();
    bt.setBean(bean);
    bt.setTextArea(textArea);
    bt.setUid(uid);
    bt.setUser(author); bt.start(); try {
    bt.join();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    } System.exit(0);
    }
    };
    t.start();
    }我这段代码运行后,没什么问题但是如果我将他最小化到任务栏后
    程序就像死了样,如果这段代码不运行
    最小化后能恢复到正常状态高手们能看出着代码哪有问题吗
      

  5.   

    JDK解释:

    public final void join()
                    throws InterruptedException等待该线程终止。 抛出: 
    InterruptedException - 如果任何线程中断了当前线程。当抛出该异常时,当前线程的中断状态 被清除。

    由此,应为阻塞当前线程