实现Runnable - 只有一种方法?

时间:2016-06-16 12:17:25

标签: java multithreading runnable

我有一个包含多种方法的课程(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();

2 个答案:

答案 0 :(得分:0)

不,它不会运行所有方法,只运行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();

答案 1 :(得分:-1)

我有一个想法。

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();
    }
   }
}