黑马程序员技术交流社区
标题:
启动一个线程是用run()还是start()?
[打印本页]
作者:
鸭梨的生活
时间:
2014-5-19 13:18
标题:
启动一个线程是用run()还是start()?
。。。。。。。。。。。。。。。
作者:
鸭梨的生活
时间:
2014-5-19 13:20
一起学习。。。。。。。。。
作者:
雨落千木的时节
时间:
2014-5-19 13:34
启动线程使用start()方法,run()方法是存储自定义线程代码块的,类似于main方法!
作者:
彭飞
时间:
2014-5-19 13:37
run()方法和start()方法的作用域是不同的
首先回答你, start()是启动线程
而run()是 某线程的方法,该线程的功能被包含在里面。
给你一个比喻,
挖掘机,
每一台挖掘机就是一个线程,想要启动线程就得使用start()来给挖掘机点火启动,
而run()是挖掘机拥有的功能,是在之前已经封装到挖掘机内部的。
start()启动挖掘机,挖掘机能干嘛, 就得看run()里有什么功能。
联想一下,,
这个例子同样解释了什么是进程,什么是线程,
一个进程至少有一个线程,
那么,挖掘某一块地,可以看作是一个进程, 而一台或者多台挖掘机就是进程里的线程。
一台电脑里有多个进程,而一个工程有多个分项,这里这个进程就是挖掘作用,而多台挖掘机的工作,就是多线程。
作者:
曲佳奇
时间:
2014-5-19 14:41
public class Test1{
public static void main(String[] args) {
Demo d = new Demo();
d.start();
//d.run();
for (int i = 0; i < 10; i++) {
System.out.println("Main run----"+i);
}
}
}
class Demo extends Thread{
public void run(){
for (int i = 0; i < 10 ; i++) {
System.out.println("Demo run----"+i);
}
}
}
复制代码
使用run()的话 就如同直接调用对象方法 程序会直接运行完run()方法后再执行下面的for循环 线程创建了 并未启动 还是单线程
使用start() 会启动线程 再调用run() 结果会交替输出
作者:
段兆洋
时间:
2014-5-19 15:26
run ()只是封装代码的一个方法而已,start()才能启动线程!
作者:
927233671
时间:
2014-5-19 15:30
当然是用start(),run()只是调用你的run方法,并没有启动新线程(控制单元)。
作者:
张鹏宇
时间:
2014-5-19 15:33
当然是start
作者:
saheru
时间:
2014-5-19 16:19
start()方法是启动(即开辟)一个线程的方法,因此线程的启动必须通过此方法,
而run()方法,只是Thread类的一个方法,它本身并不能开辟线程。
所以,当你用run()时候,程序只有一个线程,根本没达到你多线程的目的(是错误的)。而你用start()时候,你的程序又开辟了两个线程,所以结果不同
作者:
youcyou
时间:
2014-5-19 20:35
start是开启线程的,run是运行内容
作者:
张志民
时间:
2014-5-19 20:45
当然是start run中放的是同步任务
作者:
amao
时间:
2014-5-20 01:40
创建一个线程时,如果是自定义线程,需要定义一个类继承Thread,覆盖run方法。启动线程时,调用start方法,会自动调用run方法。
作者:
alax
时间:
2014-5-20 03:14
启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体。
继承Thread类的启动方式:
public class ThreadStartTest {
public static void main(String[] args) {
ThreadTest tt = new ThreadTest();// 创建一个线程实例
tt.start(); // 启动线程
}
}
实现Runnable接口的启动方式:
public class RunnableStartTest {
public static void main(String[] args) {
Thread t = new Thread(new RunnableTest()); // 创建一个线程实例
t.start(); // 启动线程
}
}
作者:
路漫漫_求索
时间:
2014-5-20 13:11
启用线程,会先调用start()方法,然后再调用run()方法.
run方法只是对象中的一个方法,如果线程没有被开启,是不会运行的
class DemoThread extends Thread
{
public void run()
{
for(int i=0;i<60;i++)
{
System.out.println("Hello World"+i);
}
}
}
public class _08多线程 {
public static void main(String[]args)
{
DemoThread d = new DemoThread();
d.start();//开启线程,并执行该线程的run方法
//d.run();仅仅是对象调用方法,而线程创建了,并没有运行。
for(int i=0;i<70;i++)
{
System.out.println("Run....."+i);
}
}
}
作者:
诺忔。初禾、
时间:
2014-5-20 13:25
调用start()
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2