这么一个问题,希望大家一定能帮忙,先谢了!!!一个机器a,想得到其他几台机器的b,c,d的cpu利用率信息。
我是这么实现的:
b,c,d提供获取cpu利用率的接口CpuRMI,其中有getCpuUsage()函数,供a机器利用RMI调用。
同时,为了并发获取b、c、d的cpu利用率,我使用多线程技术,在a上启3个线程,并发
获取三台机器的cpu利用率。上述想法,我已经用代码实现了,并进行了验证,没有问题。现在,我还想获取三台机器的其他信息,如内存利用率等,
因此,我想最好能把多线程技术封装成一个类,填入对应的函数,和参数即可使用
如:MultipleThread(float getCpuInfo(),String[]nodeList);其中,float getCpuUsage()为:获取cpu利用率的函数,类似地还可能有其他函数如:double getMemoryUsage()等
参数String[]nodeList:为节点名列表(如:b、c、d)参数请问如何写这个类:MultipleThread(float/double method(),String[]nodeList);
谢谢!

解决方案 »

  1.   

    MultipleThread(float getCpuInfo(),String[]nodeList);
    -------
    第二个参数肯定没问题
    第一个参数可以使用字符串把方法名传进来
    然后使用Class的getDeclaredMethod(String name)方法得到Method,然后在invoke()就行了
    其实和你的意思是一样的
      

  2.   

    如果getCpuInfo()静态方法的话,如楼上的则还要把它的对象进来.
      

  3.   

    如果getCpuInfo()不是静态方法的话,如楼上的则还要把它的对象进来.
      

  4.   

    这其实是个socket通讯问题,发送消息与接收消息.
    在服务器端,多线程处理连接就ok啦可以每隔一段时间服务器端向其它机子发送获取消息请求,其它机子反馈信息
      

  5.   

    对啊,getCpuInfo不是静态方法。如何是好?
      

  6.   

    你以前调用不也有对象存在的么?
    你直接用以前的对象来得到Class不就行了?最差也可以用传一个对象的名字啊,
    然后Class.forName()
      

  7.   

    感谢楼上的两次回答,
    您的解答使我到了一定的启发。谢谢!
    我的疑问是:
    虽然在b,c,d三台机器上,a调用的接口都是CpuUsage
    但要注意的是:使用RMI在创建远程对象时,创建的是三个不同的CpuUsage对象,另外,如果做成MultipleThread(类名,String[] nodeList);
    for(int i=0;i<nodeList.length;i++)
     //创建该类在不同机器上的对象
     类名 nObject=(类名)Naming.lookup(nodeList[i]+"注册的远程服务名");“类名”问题该如何解决,是否也可以使用字符串把类名传进来
    然后再怎么办????
    谢谢!!
      

  8.   

    晕,这样就更简单了
    你都知道接口是唯一的CpuUsage了
    那么代码就是这样了for(int i=0;i<nodeList.length;i++)
     //创建该类在不同机器上的对象
     CpuUsage nObject=(CpuUsage)Naming.lookup(nodeList[i]+"注册的远程服务名");这样那个参数就不用了,呵呵
      

  9.   

    看来我的表达能力比较弱:)我的意思是如果做成如下形式:
    MultipleThread(类名,String[] nodeList);“类名”可以是CpuUsage,MemoryUsage等等
    “类名”肯定还是一个参数,
    假设类名参数是一个字符窜,但怎样把这个参数转换为:真正的“类名”以便用来创建对象
      

  10.   

    恩,我明白了
    这样的问题,必须要用多态来实现了interface Usage {
    }
    CpuUsage,MemoryUsage都实现这个接口然后代码就这样子
    for(int i=0;i<nodeList.length;i++)
     //创建该类在不同机器上的对象
     Usage nObject=(Usage)Naming.lookup(nodeList[i]+"注册的远程服务名");那么后面调用方法自然回调用对应的实现子类的方法。。呵呵
      

  11.   

    呵呵 我想看看楼主的 监控cpu的代码,可以么?