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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

启动一个线程是用run()还是start()?  
线程中是调用run()方法还是start方法?还是直接使用JVM中的核心部分来调用??

4 个回复

倒序浏览
java线程有以下几种状态:一个具有生命的线程,总是处于这五种状态之一:。
1.创建状态
使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)
2.可运行状态
使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)
3.运行中状态
Java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running).此时,系统真正执行线程的run()方法.
4.阻塞状态
一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked)
5.死亡状态
线程结束后是死亡状态(Dead)

当一个线程对新线程的Thread对象调用start()方法后,这个新线程才会正开始执行。
[ 本帖最后由 那日苏 于 2011-07-17  22:09 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-7-17 22:09:16
藤椅
线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。[code]  class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }

         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }[/code]然后,下列代码会创建并启动一个线程:[code] PrimeRun p = new PrimeRun(143);
     new Thread(p).start();[/code]start() 是使该线程开始执行;
Java 虚拟机调用该线程的 run 方法。
回复 使用道具 举报
1、启动一个线程是用run()还是start()?
   启动线程是start()方法,该方法是Thread类中的,Thread类是用来建立线程对象的,也就是每new一个Thread(或者thread的子类),就建立一个线程,而线程的启动就是用start()方法。
    run()方法的作用是,存放线程将要执行的代码,所以要复写run()方法,将需要该线程执行的程序代码写入进去。
  
2、线程中是调用run()方法还是start方法?还是直接使用JVM中的核心部分来调用??
   调用的是run()方法,自定义的线程执行的就是run()方法中的代码,JVM其实也是多线程,其中主线程执行main()中的代码,另外还有垃圾回收线程,用来负责对垃圾的回收。
[ 本帖最后由 马晓伟 于 2011-07-17  22:30 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-7-18 00:18:01
报纸

回复 楼主 的帖子

启动一个线程的过程不是直接调用子类对象的run方法,而是调用子类继承来的start方法,start方法会启动一个新的线程,并执行run方法
start其实就是启动了一个线程,相当于新打开了一个进程
run方法里的代码是开了这个进程后要做的事情
JVM其实就是提供了一个运行环境,比如,windows环境可以运行exe,mac OS X系统运行app,JVM就是用来执行class的。对于楼主的“还是直接使用JVM中的核心部分来调用??”这个问题我不是很理解

评分

参与人数 1技术分 +2 收起 理由
admin + 2 回答符合题意,凌晨还在学习,精神可嘉。

查看全部评分

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