从客户端通过RMI停止一个线程

时间:2016-09-23 02:36:14

标签: java multithreading rmi

我在创建服务器和客户端之后尝试熟悉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()方法的自定义线程。

请告诉我该怎么办?即便提示也行! 感谢

0 个答案:

没有答案