我在创建服务器和客户端之后尝试熟悉RMI。我现在正在寻找一种方法,允许AdministratorClient停止一个线程(如果处理时间太长)。
我尝试使用
中断()
但是当我得到所有线程的stackTrace时,我仍然会看到应该停止的那个。
以下是AdminMethod
(在服务器中)的代码,我尝试实施killThread
方法:
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Set;
public class AdminMethod extends UnicastRemoteObject implements AdminInterface{
protected AdminMethod() throws RemoteException {}
public String getThreadList() throws RemoteException {
Set<Thread> setOfThread =Thread.getAllStackTraces().keySet();
return setOfThread.toString();
}
public void killThread(long ThreadId) throws RemoteException {
Set<Thread> setOfThread = Thread.getAllStackTraces().keySet();
for(Thread thread : setOfThread){
if(thread.getId()==ThreadId){
thread.interrupt();
}
}
}
}
这里是AdministratorClient
:
import java.rmi.Naming;
import java.util.Scanner;
public class AdministrationClient {
public static void main (String[] args) {
AdminInterface AdminProxy;
try {
AdminProxy = (AdminInterface)Naming.lookup("rmi://localhost/CBA");
String ThreadList = AdminProxy.getThreadList();
System.out.println(""+ThreadList);
Scanner sc = new Scanner(System.in);
System.out.println("Veuillez saisir un ID :");
long Id = sc.nextLong();
AdminProxy.killThread(Id);
System.out.println("Le thread "+Id+" a été correctement supprimé");
ThreadList = AdminProxy.getThreadList();
System.out.println(""+ThreadList);
sc.close();
}catch (Exception e) {
System.out.println("AdminClient exception: " + e);
}
}
}
我已经看到许多关于使用旗帜停止线程的方法的答案。但我不知道如何实现它,因为线程是自动创建的,它不是我可以覆盖the run()
方法的自定义线程。
请告诉我该怎么办?即便提示也行! 感谢