为什么我们需要通过start方法运行线程,而不是直接通过run方法运行?在使用线程时需要java中的启动方法
1
A
回答
3
由于run
方法包含新线程应执行的代码。
如果您打电话给run
方法,那么您只需在当前线程上执行它。
调用start
启动新线程,然后在新线程上执行run
方法。
6
run
方法只是在当前线程中执行线程的任务。从历史上看,您可以继承Thread
并覆盖run
- 虽然今天首选的机制是通过Thread
构造函数Runnable
。因此run
本身不会执行任何线程 - 它是start
,它会创建一个新的“实际”线程(而不仅仅是一个Thread
对象),并在启动时执行run()
。
1
start()
方法告诉JVM它需要创建一个特定于系统的线程。创建系统资源后,它将Runnable
对象传递给它以执行其run()
方法。直接调用run()
方法的“线程”与调用对象在同一线程中执行,而不是像预期的那样在单独的执行线程中执行。
换句话说,调用run()
就像正常的方法调用一样。而调用start()
会告诉线程创建必要的系统资源,然后异步执行run()
方法。
编辑:
例如,
伪代码1:
thread one = new thread();
thread two = new thread();
one.run();
two.run();
这使得线程顺序运行的,即,two.run();
将仅运行后one.run();
饰面。
伪码2:
thread one = new thread();
thread two = new thread();
one.start();
two.start();
在这种情况下,两个线程同时启动和运行。
的start()
方法调用run()
方法异步(犯规等待任何结果,只是触发了一个动作),但是当我们调用run()
,它运行同步,也就是说,它会等待直到run()
完成,然后才进到下一行代码。
0
in java Thread
总是在Stack Memory
中创建。当您创建一个新的线程时,它会在堆栈中占用新的内存。当你调用start()
方法它初始化新Stack Memory
,当你调用run()
方法它同样Stack Memory
初始化这就是为什么我们一直呼吁与start()
方法
相关问题
- 1. Java线程启动方法或方法
- 2. Java线程无法启动(或需要很长时间才能启动)
- 3. 使用方法指针启动线程
- 4. Java - 线程无法启动
- 5. 在新线程中启动方法
- 6. Java线程:在启动后调用Thread对象的run()方法
- 7. java:不要在当前活动时启动另一个线程
- 8. Java使线程同时启动
- 9. 在Java中使用LinkedList时需要List和DeQueue方法
- 10. 在Java中每个方法启动一个线程
- 11. 调用run方法,而无需启动一个新的线程
- 12. 应用程序在启动过程中需要很长时间
- 13. 需要帮助线程的run方法
- 14. 异步方法在当前线程(主线程)中启动AsyncCallback
- 15. 需要在Java方法showMessageDialog
- 16. 使用GUI启动线程(Java)
- 17. 需要线程安全Java中的MessageDigest
- 18. Delegate.Invoke()是否启动委托在新线程上指向的方法,还是需要使用Delegate.BeginInvoke()?
- 19. 启动iOS应用程序需要多少线程(至少)?
- 20. Java - 在当前线程完成时启动线程
- 21. 使用主要方法启动我的应用程序
- 22. 我是否需要boot_completed和startForeground启动服务中的线程?
- 23. 在启动/启动时自动启动应用程序的首选方法?
- 24. Java新线程何时启动?
- 25. 我需要使用哪些线程工作方法?
- 26. 如何启动方法带参数的使用线程
- 27. PyQt的UI不显示在启动时(我需要不同的线程?)
- 28. 使用DateTime时无法启动方法
- 29. Java需要内存用于新线程
- 30. 在java中同时启动10个不同的线程
一个
Thread
出于好奇:这是怎么了?为什么downvote? – 2010-03-10 10:38:10