我在做一些多任务逻辑。
我想知道当一个新的线程由java创建时?我认为只是通过调用 thread.start()或其他东西?
JVM(Java)或 DVM(Android)
生成新线程到内存的实际位置Java的创建者慷慨地设计了两种创建线程的方法:实现接口和扩展类。扩展类是Java从父类继承方法和变量的方式。在这种情况下,只能从单个父类扩展或继承。 Java中的这种限制可以通过实现接口来克服,这是创建线程的最常用方法。 (注意,继承的行为只允许类作为线程运行。由类来执行start()等。)
这意味着只要thread.start()
调用新线程就会在内存中生成。
答案 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