java创建线程的两种方法区别
在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口。
下面通过两个例子来分析两者的区别:
1)继承Thread类
publicclassTestThreadextendsThread{
intcount=3;
publicTestThread(StringThreadName){
super(ThreadName);
}
@Override
publicvoidrun(){
for(inti=0;i<10;i++)
if(count>0){
System.out.println(Thread.currentThread().getName()+"--->"+count);
count--;
}
}
publicstaticvoidmain(String[]args){
//new三个线程并启动
newTestThread("线程一").start();
newTestThread("线程二").start();
newTestThread("线程三").start();
}
}
输出结果:
线程一--->3
线程一--->2
线程一--->1
线程二--->3
线程二--->2
线程二--->1
线程三--->3
线程三--->2
线程三--->1
2)实现Runnable接口
同样跟继承Thread的代码:
publicclassTestThreadimplementsRunnable{
intcount=3;
publicTestThread(){
}
@Override
publicvoidrun(){
for(inti=0;i<10;i++)
if(count>0){
System.out.println(Thread.currentThread().getName()+"--->"+count);
count--;
}
}
publicstaticvoidmain(String[]args){
TestThreadtr=newTestThread();
//new三个线程并启动同一个Runnable
newThread(tr,"线程一").start();
newThread(tr,"线程二").start();
newThread(tr,"线程三").start();
}
}
输出结果:
线程一--->3
线程一--->2
线程一--->1
可以发现两种新建线程的方式最后的输出结果不一样,是因为在继承Thread类中,同时创建了三个线程,每个线程都执行一个任务,相当于三个线程分别各自进行三次循环打印log;而在第二种实现Runnable接口中是创建三个Thread共同去执行tr这个Runnable,相当于三个Thread共同去执行这一个循环,使得最后count只循环了一次,剩余线程二和线程三都因为使用同一个count导致未能打印出来。
结论:
1)两种创建线程的实现方式不一样,一个通过继承一个通过实现接口,在Java中如果已经继承了其他的父类,那么只能实现接口来创建线程。
2)通过上面的例子可以看到继承Thread,每个线程都独立拥有一个对象,而实现Runnable对象,多个线程共享一个Runnable实例。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
热门推荐
10 广西考试祝福语结婚简短
11 猪年祝福语简短小孩
12 元旦祝福语送长辈简短
13 恭喜二宝祝福语简短
14 祝福语暖心话简短
15 国庆中秋祝福语简短兄弟
16 朋友订婚的祝福语简短
17 送弟弟中秋祝福语简短
18 爱生日祝福语简短独特