在子线程中执行主线程方法

Posted

技术标签:

【中文标题】在子线程中执行主线程方法【英文标题】:Execute main thread method in child thread 【发布时间】:2012-07-12 03:35:33 【问题描述】:

我有一个名为 Test Example 的类,它有一个名为 dance() 的方法。在主线程中,如果我在子线程中调用 dance() 方法,会发生什么?我的意思是,该方法会在子线程还是主线程中执行?

public class TestExample 
    public static void main(String[] args) 

        final TestExample  test = new TestExample();

        new Thread(new Runnable() 

            @Override
            public void run() 

                System.out.println("Hi Child Thread");
                test.dance();
            
        ).start();

    

    public void dance() 
        System.out.println("Hi Main thraed");
    


【问题讨论】:

尝试将System.out.format("thread: %s\n", Thread.currentThread().getName()); 放入mainrun。你会得到你的答案。 【参考方案1】:

试试这个...

1.方法dance属于TestExample类,不属于主线程。

2. 每当启动 java 应用程序时,JVM 都会创建一个主线程,并将 main() 方法位于堆栈底部,使其成为入口点,但如果您正在创建另一个线程并调用一个方法,那么它会在新创建的线程内运行。

3.它是执行 dance() 方法的子线程。

看下面这个例子,我用过Thread.currentThread().getName()

    public class TestExample 
    
         public static void main(String[] args) 
    
            final TestExample  test = new TestExample();
    
           
            
          Thread t =  new Thread(new Runnable() 
    
                @Override
                public void run() 
    
                    System.out.println(Thread.currentThread().getName());
                    test.dance();
                
            );
          t.setName("Child Thread");
          t.start();
    
        
    
        public void dance() 
            System.out.println(Thread.currentThread().getName());
        
    
        


【讨论】:

【参考方案2】:

它将在子线程中执行。当你编写一个方法时,它属于一个类而不是一个特定的线程。

【讨论】:

以上是关于在子线程中执行主线程方法的主要内容,如果未能解决你的问题,请参考以下文章

android handle详解2 主线程给子线程发送消息

主线程不能执行耗时的操作,子线程不能更新Ui

Android——消息分发机制

C++怎么在主线程中使用子线程的数据? 比如说主线程中有一个数组,如何在子线程中调用这个数组

QT中UI主窗口如何与子线程相互传递参数

VC 在子线程中结束主窗口程序