A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鸭梨的生活 中级黑马   /  2014-5-19 13:18  /  1864 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

。。。。。。。。。。。。。。。

14 个回复

倒序浏览
一起学习。。。。。。。。。
回复 使用道具 举报
启动线程使用start()方法,run()方法是存储自定义线程代码块的,类似于main方法!
回复 使用道具 举报
run()方法和start()方法的作用域是不同的

首先回答你,  start()是启动线程
而run()是 某线程的方法,该线程的功能被包含在里面。

给你一个比喻,

挖掘机,
每一台挖掘机就是一个线程,想要启动线程就得使用start()来给挖掘机点火启动,
而run()是挖掘机拥有的功能,是在之前已经封装到挖掘机内部的。
start()启动挖掘机,挖掘机能干嘛, 就得看run()里有什么功能。

联想一下,,
这个例子同样解释了什么是进程,什么是线程,
一个进程至少有一个线程,
那么,挖掘某一块地,可以看作是一个进程, 而一台或者多台挖掘机就是进程里的线程。
一台电脑里有多个进程,而一个工程有多个分项,这里这个进程就是挖掘作用,而多台挖掘机的工作,就是多线程。
回复 使用道具 举报

  1. public class Test1{
  2.         public static void main(String[] args) {
  3.                 Demo d = new Demo();
  4.                 d.start();
  5. //d.run();
  6.                 for (int i = 0; i < 10; i++) {
  7.                         System.out.println("Main run----"+i);
  8.                 }
  9.         }
  10. }
  11. class Demo  extends Thread{
  12.         public void run(){
  13.                 for (int i = 0; i < 10 ; i++) {
  14.                         System.out.println("Demo run----"+i);
  15.                 }
  16.         }
  17. }
复制代码
使用run()的话 就如同直接调用对象方法 程序会直接运行完run()方法后再执行下面的for循环 线程创建了 并未启动 还是单线程  
使用start() 会启动线程 再调用run()   结果会交替输出


回复 使用道具 举报
run ()只是封装代码的一个方法而已,start()才能启动线程!
回复 使用道具 举报
当然是用start(),run()只是调用你的run方法,并没有启动新线程(控制单元)。
回复 使用道具 举报
当然是start
回复 使用道具 举报
saheru 中级黑马 2014-5-19 16:19:52
9#
start()方法是启动(即开辟)一个线程的方法,因此线程的启动必须通过此方法,
而run()方法,只是Thread类的一个方法,它本身并不能开辟线程。
所以,当你用run()时候,程序只有一个线程,根本没达到你多线程的目的(是错误的)。而你用start()时候,你的程序又开辟了两个线程,所以结果不同
回复 使用道具 举报
start是开启线程的,run是运行内容
回复 使用道具 举报
当然是start run中放的是同步任务
回复 使用道具 举报
amao 初级黑马 2014-5-20 01:40:20
12#
创建一个线程时,如果是自定义线程,需要定义一个类继承Thread,覆盖run方法。启动线程时,调用start方法,会自动调用run方法。
回复 使用道具 举报
alax 中级黑马 2014-5-20 03:14:18
13#
启动线程肯定要用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();  // 启动线程
    }
}
回复 使用道具 举报
启用线程,会先调用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);
                }
        }
       

}

回复 使用道具 举报
调用start()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马