1.Java程序启动的时候,实际上是启动了一个JVM进程,然后由JVM启动主线程来执行main()方法。 在main()方法中,我们又可以启动其他线程。 要创建一个新线程,我们需要实例化一个Thread实例,然后调用它的start()
Thread t1 = new Thread();
t1.start();
2.非lambda表达式写法
Thread t2 = new Thread() {
public void run() {
System.out.println("非lambda表达式 start new thread");
}
};
t2.start();
3.Java8 lambda表达式语法进一步简写
Thread t3 = new Thread(() ->{
System.out.println("lambda表达式 start new thread");
});
t3.start();
4.直接调用run()方法,相当于调用了一个普通的Java方法,当前线程并没有任何改变,也不会启动新线程。 上述代码实际上是在main()方法内部又调用了run()方法,打印hello语句是在main线程中执行的,没有任何新线程被创建。 必须调用Thread实例的start()方法才能启动新线程,如果我们查看Thread类的源代码, 会看到start()方法内部调用了一个private native void start0()方法, native修饰符表示这个方法是由JVM虚拟机内部的C代码实现的,不是由Java代码实现的。
Thread t4 = new MyThread();
t4.run();
t4.start();
/*定义内部类*/
static class MyThread extends Thread {
public void run() {
System.out.println("hello");
}
}
总结:
Java用Thread
对象表示一个线程,通过调用start()
启动一个新线程;
一个线程对象只能调用一次start()
方法;
线程的执行代码写在run()
方法中;