在不启动新线程的情况下调用run方法

时间:2011-04-21 11:01:04

标签: java android multithreading

请问,如果我实现这样的代码

会有什么结果
public class MyName implements runnable {
    Thread t;
    boolean checkinstance_state = false;

    /*then in a method somewhere in the class i have something like this*/

    public void firstOperation {
        /*do something and then call setBlah()*/
        setBlah();
    }

    public void setBlah(){
        if(checkedinstance_state){
            t = new Thread();
            t. start();
            checkedinstance_state = true;
        } else {
            t.run();
        }
    }

    public void run(){
        /*another method operation here*/
        setBlahBlah();
    }
}

请记住,我已经实现了runnable。大概是,我会定期访问这个类,我不想一直创建一个线程对象。所以我想要一种情况,即如果已经创建了一个线程对象,则应该调用run方法。这是正确的做法,是否会涉及到问题,我在这个实施中无法预见?谢谢。

3 个答案:

答案 0 :(得分:2)

这不会做你想做的事。创建执行程序服务,并定期将runnable的实例传递给执行程序;你不希望这个类做自己的线程管理,也不想自己管理线程。执行程序服务旨在将您与线程处理隔离开来。

答案 1 :(得分:2)

您可以调用run()方法,但代码将在您调用方法的当前线程中运行,而不是在您预期的线程实例(t)中运行。

答案 2 :(得分:0)

你应该将if条件设为

if(!checkedinstance_state)

因为使用你的代码,线程对象根本不会被初始化。

因此,第一次初始化并启动Thread对象,并且当threaed对象进入runnable状态时,JVM将自行运行run方法。从那时起,只要你调用setBlah(),就会在当前线程中显式调用run方法。