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…
更准确地说:没有办法直接杀死线程,因为不可能安全地杀死线程(除非操作系统在进程终止时杀死线程)。