我一直在java中创建一个threadmanager类,并且想要它,所以你可以输入一个类,它会在该类中运行threadrun方法但是当我编写我的代码时,我的ide会说:找不到符号threadrun
代码:
package thenetwork;
/**
*
* @author Jman
*/
public class Threadmanager implements Runnable
{
Class clas;
Object parameter1 = null;
public Threadmanager(Class classobj)
{
clas = classobj;
}
public Threadmanager(Class classobj, Object param1)
{
clas = classobj;
parameter1 = param1;
}
public void run() {
if(parameter1 != null)
{
clas.threadrun(parameter1);
}
else
{
clas.threadrun();
}
}
}
如果不清楚,请注明,我将编辑我的帖子 编辑:我需要这个类能够运行多种类型的其他类
答案 0 :(得分:2)
java.lang.Class没有名为threadrun的方法。
答案 1 :(得分:2)
我不明白你想要这个“线程管理器”类做什么,但是为了你的信息,这就是你用Java启动线程的方式:
Thread th = new Thread(runnable);
th.start();
这将创建并启动一个新线程,该线程将执行作为参数提供的Runnable
的代码。
Runnable
接口没有直接提供将参数传递给run()
方法的方法,但是您可以通过实现其他方法,实现构造函数或编码{{}来实现相同的效果。 1}}从封闭范围中检索值的方法(如果它是作为内部类实现的......)
回答问题标题中表达的问题:是的,Java确实有标准的线程管理器,还有第三方库实现了这种事情。我建议您阅读@BalusC链接到的教程...并且不要尝试实现自己的线程管理器/线程池。
答案 2 :(得分:2)
您可以使用较低级别的构造,例如Thread
,但我建议从ExecutorService
开始。它以安全可靠的方式处理大多数常见的线程需求。
答案 3 :(得分:1)
Threadrun不是class的函数。
答案 4 :(得分:1)
你错过了对你的类参数的newInstance()
调用。如果您尝试直接引用类对象,那么您将只能使用类型Class
可用的方法,而不是对象所代表的类的类型。你的课应该看起来像(我遗漏了参数逻辑):
public class Threadmanager implements Runnable {
MyThreadRunObject object;
public Threadmanager(Class classobj) {
object = (MyThreadRunObject) classobj.newInstance();
}
...
public void run() {
object.threadrun();
}
}
此外,如果您使用的是Java 1.5+,我会对您的类参数进行泛化。关于泛化它的好处是你可以做一个有界泛型T extends ThreadRunnable
并将你的threadrun方法放在一个接口中,允许你限制你的ThreadManager
类作为类参数的类型。