请问,如果我实现这样的代码
会有什么结果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方法。这是正确的做法,是否会涉及到问题,我在这个实施中无法预见?谢谢。
答案 0 :(得分:2)
这不会做你想做的事。创建执行程序服务,并定期将runnable的实例传递给执行程序;你不希望这个类做自己的线程管理,也不想自己管理线程。执行程序服务旨在将您与线程处理隔离开来。
答案 1 :(得分:2)
您可以调用run()方法,但代码将在您调用方法的当前线程中运行,而不是在您预期的线程实例(t)中运行。
答案 2 :(得分:0)
你应该将if条件设为
if(!checkedinstance_state)
因为使用你的代码,线程对象根本不会被初始化。
因此,第一次初始化并启动Thread对象,并且当threaed对象进入runnable
状态时,JVM将自行运行run方法。从那时起,只要你调用setBlah()
,就会在当前线程中显式调用run
方法。