2017-08-10 229 views
0

我想在执行new Thread的行时开始一个新的线程。我这样做:“新线程”不启动新线程?

new Thread (new Runnable() { 

@Override 
    public void run() { 

      ..... 
    } 
}).start(); 

//other code continues here 

当代码来到新的线程行它跳转到执行其他代码。为什么?

+0

它稍后将在'run()'内执行代码。 – azizbekian

+0

因为您可能正在调试启动新线程的线程。如果你在'run()'方法中放置了一个logline或者一个断点,你会发现它被执行了 – 0xDEADC0DE

+0

@ 0xDEADCODE我在run方法的第一行代码中放置了一个断点......当我调试它时仍然转到其他代码行。 – Zobi

回答

2

那么因为新的线程几乎立即开始运行,并且新的线程声明之后的代码正在被相同的前一个线程执行。

这是发生了什么:

// Main thread running 

// Some random code... 

new Thread (new Runnable() { 
@Override 
public void run() { 
    // This code will run in another thread. Usually as soon as start() gets called! 
} 
}).start(); 

// This code is still being executed by the main thread. 

除了安装调试器,一个简单的方法来检查线程是否真正开始运行的方法是把Log语句中run()

+0

如何检查在与主线程“并行”的另一个线程中运行的执行代码?我在run()的第一行代码中放了一个断点,但它没有执行。 – Zobi

+0

你什么时候放置断点?之前运行您的应用程序或之后? –

+0

@Zobi做了一件事,在run()方法中加入一个日志并检查它是否正在执行 –

0

简单:因为正是你想要发生!

您创建新()一个新的线程,因为你马上拨打的start()那个对象上,该作业开始做工作。

而您的主线程继续其“主要”工作。它就像:你拍拍你的朋友在他的肩膀上(发信号给他:开始跑步) - 现在你问:“他为什么离开了?”

这就是这一切!

+0

那么我如何检查run方法内部执行的代码呢? – Zobi

+1

这取决于这个代码在做什么!直到你澄清代码应该做什么 - 以及你观察到的是什么,我们都无法帮助你。 – GhostCat

+0

我想从Android应用程序登录比找到安装在服务器上的文件,并下载它 – Zobi