Java 在执行Thread.join()之后,使用相同的方法执行代码

Java 在执行Thread.join()之后,使用相同的方法执行代码,java,android,multithreading,Java,Android,Multithreading,我的问题是,用来杀死线程的join方法没有执行该方法的其余部分,该方法也是在线程中启动的。下面是一个代码示例: private static Thread thread; public static void addMessage(final String s) { thread = new Thread() { @Override public void run() { String data = Message.send(s)

我的问题是,用来杀死线程的
join
方法没有执行该方法的其余部分,该方法也是在线程中启动的。下面是一个代码示例:

private static Thread thread;

public static void addMessage(final String s) {
    thread = new Thread() {
        @Override
        public void run() {
            String data = Message.send(s);
            addMessageToContainer(data);
        }
    };
    thread.start();
}

public static void addMessageToContainer(String data) {
    //Do some stuff with the data
    try {
        thread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    //This code here will not be executed.
}
因此,通常我可以在调用
join
函数之前执行代码。但是我必须在这个线程执行之后加载一个包含一些内容的webview。因此,当我删除
连接时,它会给我以下错误消息:

java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'Thread-9072'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {5ac9b39} called on null, FYI main Looper is Looper (main, tid 1) {5ac9b39})

那么,在线程执行之后,如何加载内容呢?

Join不会杀死线程。Join将一直等待,直到该线程自杀。因此,代码将被执行——就在将来某个时候,当该线程决定其完成时。从该线程调用wait将导致该线程死锁,永远不会执行任何操作,也永远不会死机。因此,在上面的例子中,您从线程本身调用它,它将永远挂起

没有办法直接杀死线程,因为不可能安全地杀死线程。从外部终止线程的方法是中断它,让线程每隔一段时间检查它是否已中断(),如果是,则终止它自己。从内部杀死线程的方法是从runnable的run方法返回


您的webview错误与此完全无关。只能触摸主线程上的视图。不要对线程上的webview执行任何操作。

Join不会终止线程。Join将一直等待,直到该线程自杀。因此,代码将被执行——就在将来某个时候,当该线程决定其完成时。从该线程调用wait将导致该线程死锁,永远不会执行任何操作,也永远不会死机。因此,在上面的例子中,您从线程本身调用它,它将永远挂起

没有办法直接杀死线程,因为不可能安全地杀死线程。从外部终止线程的方法是中断它,让线程每隔一段时间检查它是否已中断(),如果是,则终止它自己。从内部杀死线程的方法是从runnable的run方法返回


您的webview错误与此完全无关。只能触摸主线程上的视图。不要对线程上的webview执行任何操作。

返回或
抛出…
更准确地说:没有办法直接杀死线程,因为不可能安全地杀死线程(除非操作系统在进程终止时杀死线程).return或
throw…
更准确地说:没有办法直接杀死线程,因为不可能安全地杀死线程(除非操作系统在进程终止时杀死线程)。