Java新线程何时启动?

时间:2014-04-08 08:31:59

标签: java android multithreading

我在做一些多任务逻辑。

我想知道当一个新的线程由java创建时?我认为只是通过调用 thread.start()或其他东西?

JVM(Java) DVM(Android)

生成新线程到内存的实际位置

Java的创建者慷慨地设计了两种创建线程的方法:实现接口和扩展类。扩展类是Java从父类继承方法和变量的方式。在这种情况下,只能从单个父类扩展或继承。 Java中的这种限制可以通过实现接口来克服,这是创建线程的最常用方法。 (注意,继承的行为只允许类作为线程运行。由类来执行start()等。)

这意味着只要thread.start()调用新线程就会在内存中生成。

4 个答案:

答案 0 :(得分:3)

当你调用线程启动时创建它。但是,各种库将自己调用线程启动,例如,如果您创建一个将管理其自己的线程的ThreadPoolExecutor。

真的这个问题太宽泛了,你需要向下钻取并更具体地询问你真正需要知道的事情。

答案 1 :(得分:1)

是的,Thread.start()是启动一个线程,一个线程池管理工作线程池,它包含一个让任务等待执行的队列

请访问

<强> http://blog.jamesdbloom.com/JVMInternals.html

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

http://www.journaldev.com/1069/java-thread-pool-example-using-executors-and-threadpoolexecutor

http://howtodoinjava.com/2013/03/12/java-executor-framework-tutorial-and-best-practices/

但是,用Java创建一个线程是这样的:

  Thread thread = new Thread();

要启动该线程,您将调用其start()方法,如下所示:

thread.start();

创建Thread的子类并覆盖run()方法。 run()方法是调用start()后线程执行的方法。这是一个例子:

  public class MyThread extends Thread {

    public void run(){
       System.out.println("MyThread running"); 
    }
  }

要创建并启动上述线程,您可以这样做:

MyThread myThread = new MyThread();
  myTread.start();

你也可以像这样创建一个Thread的匿名子类:

 Thread thread = new Thread(){
    public void run(){
      System.out.println("Thread Running");  
    }
  }

  thread.start();

指定线程应运行的代码的另一种方法是创建一个实现java.lang.Runnable的类。 Runnable对象可以由Thread执行。 这是一个Java Runnable示例:

  public class MyRunnable implements Runnable {

    public void run(){
       System.out.println("MyRunnable running");
    }
  }

要让线程执行run()方法,请在其构造函数中将MyRunnable的实例传递给Thread。以下是如何做到的:

 Thread thread = new Thread(new MyRunnable());
   thread.start(); 

匿名实现Runnable,如下所示:

   Runnable myRunnable = new Runnable(){

     public void run(){
        System.out.println("Runnable running");
     }
   }


   Thread thread = new Thread(myRunnable);
   thread.start();

答案 2 :(得分:1)

显然,是的,它是Thread.start()方法。然而,这不是唯一的一种方式,因为有其他数据结构在内部启动Thread而没有明确地在其上发布.start()。这是AsyncTask的情况,其中Thread语句创建了.execute()

ThreadPoolExecutor的情况下,.start()不需要{{1}},因为它自己处理。

答案 3 :(得分:1)

我们可以通过扩展Thread Class来实现Runnable接口来创建线程。

以下代码创建线程。

Thread t = new Thread(new Runnable(){
@Override
public void run() {
}

});

对于多线程,您可以尝试本教程: http://www.journaldev.com/1079/java-thread-tutorial