Java Android线程getName提供当前类名
在Android中,我有一个类:Java Android线程getName提供当前类名,java,android,multithreading,Java,Android,Multithreading,在Android中,我有一个类: class A extends Thread { A() { setName("AThread"); } class SM extends StateMachine { class A1 extends State { @Override enter() { Log.d (TAG, "" + Thread.currentThread().getName())
class A extends Thread {
A() {
setName("AThread");
}
class SM extends StateMachine {
class A1 extends State {
@Override
enter() {
Log.d (TAG, "" + Thread.currentThread().getName()); // this gives A
}
}
}
}
class B {
B1 () {
new Handler(super.getLooper()).postDelayed(new Runnable() {
@Override
public void run() {
mA = new A();
mA.start(); // start thread
}
}, 0);
}
}
B类对象正在从Android服务运行。
SM是一个状态机类。A1是一个国家级。
因此,当我创建SM并切换到状态A1时,执行enter()
。SM对象在线程内创建,从线程运行。切换到状态也发生在线程内部并从线程运行。
getName
给出类名而不是线程名“AThread”。
为什么?
谢谢。我明白了,您的状态机正在处理程序的线程上下文中运行。 我敢打赌,即使您从类A的线程中删除extend,您的代码也可以正常工作。 定义一个扩展线程并不是在另一个线程上执行StateMachine,而是在Looper的上下文中执行 下面的代码打印到AThread
public class StateMachineEx {
class A extends Thread {
A() {
setName("AThread");
}
@Override
public void run(){
Log.d ("XXX", "" + Thread.currentThread().getName()); // this gives A
}
}
StateMachineEx(Context context) {
new Handler(context.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
A mA = new A();
mA.start(); // start thread
}
}, 0);
}
}您在哪里调用
方法1
?另外,currentThread()
是一个方法而不是一个字段。什么时候执行方法A1
?它是由线程A
首先执行的吗?现在回答上述问题。请发布实际代码。这让人困惑。您没有显示在哪里创建A1
以及哪个线程正在调用enter
。那么上面的代码有什么区别呢?您正在启动并在run类中打印线程名称。您还将从run of Handler启动一个线程。即使您从Thread类中删除扩展类“A”,它也会工作。是的,我应该删除“扩展线程类”。在您的示例代码中,直接从处理程序的上下文调用“enter”函数,这就是为什么您得到的是输出“A”而不是AThread。您最后的注释是正确的。谢谢