当前位置:  开发笔记 > 编程语言 > 正文

java中实现runnable的类是否可以使用run()以外的方法?

如何解决《java中实现runnable的类是否可以使用run()以外的方法?》经验,为你挑选了2个好方法。

我正在尝试实现这样一个简单的类:

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,还是可以使用构造函数传递它?



1> Outlaw Progr..:

您可以实现您想要的任何方法.但是,您需要确保引用使用您的类名,而不是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!



2> Mr. Shiny an..:

您必须记住您在这里使用的不同类/接口:

线

可运行

您的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();

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有