线程运行的方式有两种:
1、创建Thread子类的一个实例并重写run方法。
package MyThreadTest;
public class MyMainThread {
/**
* @param args
*/
public static void main(String[] args) {
// 1、
Thread t = new MyThread_A();
/**
* 线程启动后start方法就会立即返回,看似另起线程一样。
* 不会等待到run方法执行完后继续回到start的地方继续执行。
*/
t.start();
System.out.println("hello A " + t.getName());
// 2、
Thread thread_B = new Thread(){
public void run(){
System.out.println("I am B" + getId() );
}
};
thread_B.start();
System.out.println("hello B");
// 3、
/**
* run()方法并非是由刚创建的新线程所执行的,而是被创建新线程的当前线程所执行了。
* 如果一个线程start两次则报错(java.lang.IllegalThreadStateException)。
* 但是start和run可以都执行
*/
// thread_B.start();
thread_B.run();
}
}
package MyThreadTest;
public class MyThread_A extends Thread{
public void run(){
System.out.println("I am A ");
}
}
2、创建类的时候实现Runnable接口。
package MyThreadTest;
public class MyMainThread {
/**
* @param args
*/
public static void main(String[] args) {
// 1、
Thread thread_C = new Thread(new MyRunnable());
thread_C.start();
System.out.println("hello C");
// 2、
Runnable runnable_D = new Runnable(){
public void run(){
System.out.println("I am D, I am running");
}
};
Thread thread_D = new Thread(runnable_D);
thread_D.start();
System.out.println("hello D");
}
}
package MyThreadTest;
public class MyRunnable implements Runnable{
public void run(){
System.out.println("I am C, I am running ");
}
}