这是人家设计语言的人规定的吧实现runable或者继承thread就算是线程类了,至于你急着想知道为什么,先多用几次,看看书上的一些实例估计就不会那么抽象了吧

解决方案 »

  1.   

    run()方法在每个线程启动时都会首先执行,启动几个线程就有几个线程去执行这个run()方法。
    run()方法是Runnabl接口的抽象方法。实现Runnabl接口就必须实现它的方法,而这个方法就是线程的入口。
      

  2.   

    准确的说实现了Runnable的类只是定义了一个任务,一般还要把实现了Runnable的类的对象传递给一个Thread对象才能开启线程:Runnable r=new Runnable(){
    public void run() {
    while(true){
    System.out.println("1111");
    }                
    }
    }
    Thread t = new Thread(r);
    t.start();
    或者下面的形式也可以开启一个线程,也就是重写Thread类的run方法:class First extends Thread{
    public void run(){
    while(true){
    System.out.println("11111111");
    }
    }
    }
    public class Test{
    public static void main(String []args){
    Thread t=new First();
    t.start();
    }
    }
    你可以再看一下Thread类的源代码:private Runnable target;public Thread(Runnable target) {
    init(null, target, "Thread-" + nextThreadNum(), 0);
    }private void init(ThreadGroup g, Runnable target, String name, long stackSize) {
    //其它代码
    this.target = target;
    //其它代码
    }public void run() {
    if (target != null) {
    target.run();
    }
    }
    所以使用第一种方式开启线程的时候,target就是构造方法传过来的Runnable对象,就会去执行target的run方法,也就是Runnable对象的任务,如果是第二种方式,则执行已经重写过的run方法里的任务
      

  3.   

    再看一下Thread类的start方法:public synchronized void start() {
    if (threadStatus != 0)
    throw new IllegalThreadStateException();
    group.add(this);
    start0();
    if (stopBeforeStart) {
    stop0(throwableFromStop);
    }
    }private native void start0();
    start0方法用的native关键字,百度了一下,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。可以再看一下JDK的文档,关于Thread类的start方法的介绍:
    public void start()
             使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 所以我觉得start0方法里应该就是做了让虚拟机调用该线程的 run 方法,也就是Thread类的run方法,也就执行了run方法里的任务
      

  4.   

      因为Thread的run方法是调用Runnable的run方法的
      

  5.   

    Thread类是implements了Runnable接口;调用的run()方法,其实就是Thread类中的run()方法;代理设计模式啊!
      

  6.   

    不好意思,刚才给打错了,Thread类是implements了Runnable接口;调用的start()方法,其实就是Thread类中的start()方法;代理设计模式。
      

  7.   

    start()方法调用start0() 方法来开始争抢系统资源。
      

  8.   

    至于怎么争抢系统资源就是操作系统的事了,我们只要准备好了Thread类的对象,并通过start0()这个开关,使Thread类的对象开始争抢系统资源就行了。
      

  9.   

    那就是说start0就是最底层代码,至于start0是怎么实现的就没法知道了吗?
      

  10.   

    多线程实现的两种方式是:Thread和Raunable.
      

  11.   

    不能。线程要调用run方法而已。
      

  12.   

    那就是说start0就是最底层代码,至于start0是怎么实现的就没法知道了吗?
    是的,并且这个方法肯定不是用java实现的
      

  13.   

    有一本书叫《深入Java虚拟机》之前我记得是第二版,没看下去,里面有讲类加载机制,不过仅仅是机制,如果你一定要探索最底层的代码,估计去看底层的C/C++(我猜大概是这两种的),不过在《深入Java虚拟机》里面也有些底层机制,可以去学习下,不过没有源码。