Thread类和Runnable接口实现方式的区别
1个回答
展开全部
1 线程接口的实现有两种方式,第一:继承Thread类;第二:实现Runnnable接口;
2 两种创建方式上的不同:
建线程的第一种方式:继承Thread ,由子类复写run方法。
1,定义类继承Thread类;
2,目的是复写run方法,将要让线程运行的代码都存储到run方法中;
3,通过创建Thread类的子类对象,创建线程对象;
4,调用线程的start方法,开启线程,并执行run方法。
创建线程的第二种方式:实现一个接口Runnable。
1,定义类实现Runnable接口。
2,覆盖接口中的run方法(用于封装线程要运行的代码)。
3,通过Thread类创建线程对象;
4,将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。
3 下面是具体的代码展示两种方式创建线程:
继承Thread类创建线程的代码:
public class ThreadDemo {
public static void main(String[] args) {
// ThreadTest是继承了Thread类
ThreadTest t1=new ThreadTest (" 1");
t1.start();
}
}
//线程类 继承Thread类
public class ThreadTest extends Thread {
private int ticket=100;//每个线程都拥有100张票
public ThreadTest (){}
public ThreadTest (String name){
super(name);
}
@Override
public void run() {
while(ticket>0){
System.out.println(Thread.currentThread().getName());
}
}
}
实现Runnable 接口的方式:
class Person{
private int sum;
public void add(int n){
sum+=n;
System.out.println("sum="+sum);
}
}
//Person类实现Runnable接口
class Person implements Runnable{
private Person b=new Person ();
public void run(){
synchronized(b){
for(int x=0;x<3;x++)
{
b.add(100);
}
}
}
}
4 实际开发中一般使用Runnable接口的方式比较多,因为:
通过继承Thread类的方式,可以完成多线程的建立。但是这种方式有一个局限性,如果一个类已经有了自己的父类,就不可以继承Thread类
而实现Runnable接口可以避免单继承的局限性。
2 两种创建方式上的不同:
建线程的第一种方式:继承Thread ,由子类复写run方法。
1,定义类继承Thread类;
2,目的是复写run方法,将要让线程运行的代码都存储到run方法中;
3,通过创建Thread类的子类对象,创建线程对象;
4,调用线程的start方法,开启线程,并执行run方法。
创建线程的第二种方式:实现一个接口Runnable。
1,定义类实现Runnable接口。
2,覆盖接口中的run方法(用于封装线程要运行的代码)。
3,通过Thread类创建线程对象;
4,将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。
3 下面是具体的代码展示两种方式创建线程:
继承Thread类创建线程的代码:
public class ThreadDemo {
public static void main(String[] args) {
// ThreadTest是继承了Thread类
ThreadTest t1=new ThreadTest (" 1");
t1.start();
}
}
//线程类 继承Thread类
public class ThreadTest extends Thread {
private int ticket=100;//每个线程都拥有100张票
public ThreadTest (){}
public ThreadTest (String name){
super(name);
}
@Override
public void run() {
while(ticket>0){
System.out.println(Thread.currentThread().getName());
}
}
}
实现Runnable 接口的方式:
class Person{
private int sum;
public void add(int n){
sum+=n;
System.out.println("sum="+sum);
}
}
//Person类实现Runnable接口
class Person implements Runnable{
private Person b=new Person ();
public void run(){
synchronized(b){
for(int x=0;x<3;x++)
{
b.add(100);
}
}
}
}
4 实际开发中一般使用Runnable接口的方式比较多,因为:
通过继承Thread类的方式,可以完成多线程的建立。但是这种方式有一个局限性,如果一个类已经有了自己的父类,就不可以继承Thread类
而实现Runnable接口可以避免单继承的局限性。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询