2014-04-08 60 views
0

我做一些多任务处理逻辑。Java新线程何时启动?

我想知道,当一个新的线程是在Java创造?我认为它只是通过调用thread.start()或其他什么东西?

实际到位产生新的线程进入由JVM(Java)的内存DVM(安卓)

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

这意味着只要thread.start()将调用一个新的线程在内存中生成。

回答

1

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

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

3

,当你调用线程它创建开始肯定。然而各种库会打电话,如果你创建一个ThreadPoolExecutor,它会管理自己的线程的线程开始自己,例如。

真的这个问题太广泛了,您需要深入研究并更具体地询问您实际需要知道的内容。

+0

感谢蒂姆·B I想知道代新线程的实际的位置在内存JVM或DVM。 –

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对象可以由线程执行。 这里是一个Java可运行例如:

public class MyRunnable implements Runnable { 

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

具有由一个线程执行run()方法,通MyRunnable的实例,以在其构造一个线程。这里是如何做到这一点:

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(); 
1

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

以下代码创建线程。

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

});

多线程你可以试试这个教程: http://www.journaldev.com/1079/java-thread-tutorial