2011-04-21 115 views
1

请,会是怎样的结果,如果我实现诸如记住我已经实现可运行此调用run方法,而无需启动一个新的线程

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

轴承代码。情况是,我会不断地访问这个类,并且我不想一直创建一个线程对象。所以我想要一个情况,如果一个线程对象已经被创建,run方法应该被调用。这是一个正确的事情,是否会涉及问题,我不能在这个实现中预见?谢谢。

+0

“尝试”是如何进入的 – 2011-04-21 11:07:58

+0

哎呀抱歉,我正在写代码,因为我张贴。所以我没有想太多。将改变它。 :) – irobotxxx 2011-04-21 11:10:24

+0

首先会发生的是,您将因违反Java命名约定而被捕。然后你会得到一个编译错误。 – 2011-04-21 13:53:26

回答

2

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

+0

约瑟夫是正确的,你应该只是将一个Runnable发布到全局处理程序。或者可能是AsyncTask线程。 这不会运行,因为内部实例化应该会停止发布Looper未启动。 – 2011-04-21 11:07:10

+0

文档:http://developer.android.com/reference/java/util/concurrent/ExecutorService.html – 2011-04-21 11:08:12

+0

该类实际上也扩展了服务。我这样做了这个问题,所以它可能尽可能通用,因为有些可能不是Android倾向于的。所以我仍然需要一个ExecutorService?在我的情况下,这两种方法都是在一个方法结束时阻止操作,它调用第二个方法。我在一个服务中执行一个方法,然后在一个线程中执行第二个方法。 – irobotxxx 2011-04-21 11:21:28

2

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

0

你应该有,如果条件为

if(!checkedinstance_state) 

因为你的代码的线程对象将不会在所有得到初始化。

因此,当线程对象首次被初始化并启动时,当有线对象进入runnable状态时,JVM将自行运行run方法。并且从那时起,只要您致电setBlah(),那么将在当前线程中显式调用run方法。

+0

谢谢..我想知道为什么它不断给我一个空指针例外t.run(); – irobotxxx 2011-04-21 11:15:34

相关问题