我正在尝试实现这样一个简单的类:
public static void main(String args[]) { try { myClass test = new Thread(new myClass(stuff)); test.start(); test.join(); } catch (Throwable t) { } }
当我尝试在myClass中包含print()方法并使用它时,我在java.lang.Thread类中得到一个"找不到符号".我真的不需要把它作为一个线程,但我想,只是为了测试它.如果我想让print()方法起作用,我是否需要更改它?
编辑:对不起,我刚刚意识到我可以在run()函数lol中调用print().为什么我不能在外面打电话呢?这对我来说没有意义.如果我添加synchronized或者某些东西我可以调用run/class之外的函数吗?
编辑2:对不起,我在这里误写了这些名字.
编辑3:我目前正在这样做:
Thread test = new Thread(new myClass(stuff)); teste.start(); teste.join();
如果我使用新的Runner,似乎我不能使用start()和join().有办法解决这个问题吗?
编辑4:好的,让我们再试一次:我有myEnvironment,这是一个类,我有myAgent,这是另一个类.myAgent是主题.myAgent需要myEnvironment,所以我将它作为参数传递给构造函数.但是,我不能通过扩展Thread来做到这一点,因为找不到构造函数(myEnvironment).我是否必须通过另一个函数设置myEnvironment,还是可以使用构造函数传递它?
您可以实现您想要的任何方法.但是,您需要确保引用使用您的类名,而不是Runnable:
public class MyRunner implements Runnable { @Override public void run(); public void somethingElse(); } Runnable r = new MyRunner(); r.somethingElse(); // won't work, this method not defined by Runnable. MyRunner m = new MyRunner(); m.somethingElse(); // success!
您必须记住您在这里使用的不同类/接口:
线
可运行
您的Runnable或Thread的子类
如果变量的声明类型具有该方法,则只能调用变量上的方法.而Runnable对象不是Threads; 它们只是一个Thread可以运行的代码.
例:
class MyRunnable implements Runnable() { public void run() { /* do run stuff */ } public void print() { /* do print stuff */ } } class MyThread extends Thread() { public void run() { /* do run stuff */ } public void print() { /* do print stuff */ } } Thread t = new Thread(new MyRunnable()); t.start(); t.print(); // error, t is a Thread not a MyRunnable and not a MyThread t.join(); MyRunnable mr = new MyRunnable(); mr.run(); // doesn't run in its own thread mr.print(); // this is ok Runnable r = new MyRunnable(); r.run(); // doesn't run in its own thread r.print(); // error, r is defined as Runnable which has no print() method MyThread mt = new MyThread(); mt.start(); mt.print(); // this is ok because mt is a MyThread mt.join();