1、通过实现Runnable接口线程创建
(1).定义一个类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。
(2).创建Runnable接口实现类的对象。
(3).创建一个Thread类的对象,需要封装前面Runnable接口实现类的对象。(接口可以实现多继承)
(4).调用Thread对象的start()方法,启动线程
示例代码:
public class ThreadTest implements Runnable {
private int countDown = 10;
@Override
public void run() {
while (countDown-- > 0) {
System.out.println("#" + Thread.currentThread().getName() + "(" + countDown + ")");
}
}
public static void main(String[] args)
{
ThreadTest tt = new ThreadTest();
new Thread(tt).start();
new Thread(tt).start();
System.out.println("火箭发射前倒计时");
}
}
2、通过继承Thread类创建线程
(1).首先定义一个类去继承Thread父类,重写父类中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。
(2).直接创建一个ThreadDemo2类的对象,也可以利用多态性,变量声明为父类的类型。
(3).调用start方法,线程t启动,隐含的调用run()方法。
示例代码:
public class ThreadTest1 extends Thread{
private int count = 10;
public void run(){
for (int j = 0;j < this.count; j++){
if(this.count > 0){
System.out.println(this.currentThread().getName() + " ---- " + (this.count--));
}
}
}
public static void main(String[] args) {
new ThreadTest1().start();
new ThreadTest1().start();
new ThreadTest1().start();
}
}
通过对结果的比较,我们不能看出他们两者之间的区别:
1、就是通过继承Thread类的方式时,线程类就无法继承其他的类来实现其他一些功能,实现接口的方式就没有这中限制;
2.也是最重要的一点就是,通过实现Runnable接口的方式可以达到资源共享的效果。
所以我们通常情况下都是采用实现Runnable的方式去实现多线程