Java Android线程getName提供当前类名

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

在Android中,我有一个类:

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。您最后的注释是正确的。谢谢