这么一个问题,希望大家一定能帮忙,先谢了!!!一个机器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);
谢谢!
我是这么实现的:
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);
谢谢!
解决方案 »
- Java生成.exe文件怎么更改图标
- String sql in() 问题
- java如何读取大文件
- 错误的解答。。。(希望高手能来帮我下下)
- JTree的问题,请教!
- 线程中调用wait方法和sleep方法,很简单,都进来看看
- ascii如何转换为int等数值类型?
- 关于Integer.parseInt(string str)和Integer.valueOf(String str)的困惑?在线等!
- 关于abstract和final的问题
- AppletViewer里面可以,IE里面不行
- debian下安装jdk1.5.0 update2失败(100')
- 请问一个eclipse写的java程序如何打包成类似lumaqq那种可以在win下用的?
-------
第二个参数肯定没问题
第一个参数可以使用字符串把方法名传进来
然后使用Class的getDeclaredMethod(String name)方法得到Method,然后在invoke()就行了
其实和你的意思是一样的
在服务器端,多线程处理连接就ok啦可以每隔一段时间服务器端向其它机子发送获取消息请求,其它机子反馈信息
你直接用以前的对象来得到Class不就行了?最差也可以用传一个对象的名字啊,
然后Class.forName()
您的解答使我到了一定的启发。谢谢!
我的疑问是:
虽然在b,c,d三台机器上,a调用的接口都是CpuUsage
但要注意的是:使用RMI在创建远程对象时,创建的是三个不同的CpuUsage对象,另外,如果做成MultipleThread(类名,String[] nodeList);
for(int i=0;i<nodeList.length;i++)
//创建该类在不同机器上的对象
类名 nObject=(类名)Naming.lookup(nodeList[i]+"注册的远程服务名");“类名”问题该如何解决,是否也可以使用字符串把类名传进来
然后再怎么办????
谢谢!!
你都知道接口是唯一的CpuUsage了
那么代码就是这样了for(int i=0;i<nodeList.length;i++)
//创建该类在不同机器上的对象
CpuUsage nObject=(CpuUsage)Naming.lookup(nodeList[i]+"注册的远程服务名");这样那个参数就不用了,呵呵
MultipleThread(类名,String[] nodeList);“类名”可以是CpuUsage,MemoryUsage等等
“类名”肯定还是一个参数,
假设类名参数是一个字符窜,但怎样把这个参数转换为:真正的“类名”以便用来创建对象
这样的问题,必须要用多态来实现了interface Usage {
}
CpuUsage,MemoryUsage都实现这个接口然后代码就这样子
for(int i=0;i<nodeList.length;i++)
//创建该类在不同机器上的对象
Usage nObject=(Usage)Naming.lookup(nodeList[i]+"注册的远程服务名");那么后面调用方法自然回调用对应的实现子类的方法。。呵呵