【问题标题】:implements Runnable - ONLY ONE method?实现 Runnable - 只有一种方法?
【发布时间】:2016-06-16 12:17:25
【问题描述】:

我有一个包含多种方法的类(casa()run()predio()、...)。我的班级实现了Runnable。当我用我的类的对象创建一个线程时,它会执行所有方法吗?有没有办法选择执行哪一个?这是我的Runnable 课程:

public class acao implements Runnable {

    public void casa() {
        for (int i = 0; i < 90000; i++) {
            System.out.println(i + "casa");
        }
    }

    public void run() {
        for (int i = 0; i < 90000; i++) {
            System.out.println("t" + i);
        }
    }

    public void predio() {
        for (int i = 0; i < 90000; i++) {
            System.out.println(i + "predio");
        }
    }

    public void carro() {
        for (int i = 0; i < 90000; i++) {
            System.out.println(i + "Carro");
        }
    }

}

下面是我用它创建线程的方法:

acao acao = new acao();
Thread threadDaAcao = new Thread(acao);
threadDaAcao.start();

【问题讨论】:

  • 什么是 Execultar/execultará ?
  • 您也是 * 的新手。所以请花一些时间在帮助中心上,以了解什么是好的问题......换句话说:不知道你在问什么;请退后一步,记住我们不是你;我们不知道你在想什么。
  • 贵吗?这是由谷歌或必应翻译的吗?如果你使用的是 Swing 和 JProgressBar,有examples on the Internet
  • 对不起。 “实现可运行”会执行所有方法吗?有没有办法只执行一个选择的?
  • 这3个方法是静态的吗?如果不是,您是否总是希望它们为您的类的同一个实例执行?请包含一些代码来演示您正在尝试做的事情。

标签: java multithreading runnable


【解决方案1】:

不,它不会运行所有方法,只会运行 run() 方法。阅读 java.lang.Thread 类的 javadoc。以大写字母开头的类名也是一个好习惯 - 所以 Acao,而不是 acao。

实际上甚至不需要让你自己的类 Runnable。像这样使用匿名类:

Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            Acao a = new Acao();
            a.predio();
            a.casa();
            a.carro();
        }
    });
t.start();

【讨论】:

  • 想法是使用其中一种或两种方法。不是全部
  • 那么你需要弄清楚线程应该如何知道调用哪些方法。您可以将实例属性存储在 Acao 类中说“callMethodX”
【解决方案2】:

我有一个想法。

public class EscolheAcao implements Runnable {

public String acao;

public EscolheAcao(String a) {
    this.acao = a;
}

public void run() {
    escolhe(acao);
}

public void escolhe(String acao) {
    acao a = new acao();

    if (acao.equals("carro")) {
        a.carro();
    }
    if (acao.equals("casa")) {
        a.casa();
    }
    if (acao.equals("predio")) {
        a.predio();
    }
   }
}

【讨论】: