创建线程
第一种:extends Thread 类
继承Thread类,重写run方法;
通过new ThreadTest(线程名字).start()来启动线程
eg:
//通过继承thread
public class TreadTest extends Thread{
private int count=10;
@Override
public void run(){
while (true){
System.out.println(count+"");
if (--count==0){
return;
}
}
}
public static void main(String [] args){
new TreadTest().start();
}
}
第二种: 实现Runnable接口
由于Java没有多重继承的本领,使得,比如一个类已经extend其他类,但是还要使用Thread.那么这时候就不能再extend Thread,而是implements Runnable接口在实现
比如,一个扩展IFrame类的GUI程序就不能再继承Thread类,因此
public class Thread extends Object implements Runnable
ps:[其实,实质上Thread类实现了Runnable接口,其中run()方法就是对Runnable接口中的run()方法的具体实现]
public class ThreadImplRunnable implements Runnable {
/**
* 线程名称
*/
private String threadName;
/**
* 构造函数
*
* @param threadName 线程名称
*/
public ThreadImplRunnable(String threadName) {
this.threadName = threadName;
}
/**
* 重写run方法
*/
@Override
public void run() {
System.out.println(threadName);
}
}
public class ThreadMain {
public static void main(String[] args) {
ThreadImplRunnable threadImplRunnable = new ThreadImplRunnable("Thread1");
new Thread(threadImplRunnable).start();
threadImplRunnable = new ThreadImplRunnable("Thread2");
new Thread(threadImplRunnable).start();
System.out.println("end");
}
}
程序输出:
Thread1
Thread2
end
ps[启动一个新线程,不是直接调用Thread子类对象的run()方法,而是调用Thread子类的start()方法,Thread类的start()会产生一个新线程,该线程运行thread子类的run方法()]
总结有两种创建线程的方法
extends Thread 类
implements Runnable接口
一般使用第一种方法,但是如果已经扩展了其他类,而无法拓展Thread类时,就要实现Runnable接口。
实现线程run方法就不代表 thread.run()来启动一个线程;而是运行Thread.start()方法,该方法会创建一个线程,然后线程的run()方法。