为啥要实现Runnable接口,来实现多线程?把Thread作为父类则不能呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥要实现Runnable接口,来实现多线程?把Thread作为父类则不能呢?相关的知识,希望对你有一定的参考价值。

为什么要实现Runnable接口,来实现多线程?把Thread作为父类则不能呢

当然可以,这是是做线程的两个方法
创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:

--------------------------------------------------------------------------------

class PrimeThread extends Thread
long minPrime;
PrimeThread(long minPrime)
this.minPrime = minPrime;


public void run()
// compute primes larger than minPrime
. . .



--------------------------------------------------------------------------------

然后,下列代码会创建并启动一个线程:

PrimeThread p = new PrimeThread(143);
p.start();
创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示:

--------------------------------------------------------------------------------

class PrimeRun implements Runnable
long minPrime;
PrimeRun(long minPrime)
this.minPrime = minPrime;


public void run()
// compute primes larger than minPrime
. . .



--------------------------------------------------------------------------------

然后,下列代码会创建并启动一个线程:

PrimeRun p = new PrimeRun(143);
new Thread(p).start();
每个线程都有一个标识名,多个线程可以同名。如果线程创建时没有指定标识名,就会为其生成一个新名称。
参考技术A 因为java不支持多重继承
当继承Thread类时,就不能继承其它类了
所以实现Runnable接口,就可以使该类继承其它类,以拥有更多的属性和方法
参考技术B 可以的
创建线程有2中方法:
1.extends Thread
实现public void run()方法
2.implements Runnable
也实现public void run()方法
之后在用一个实现Runnable 方法的类做 Thread的参数,然后在new 出来之后 调用start 方法就可以了
参考技术C 是可以的。 参考技术D 请读API

JAVA多线程继承Thread 与实现Runnable接口的相关疑问

简述JAVA多线程继承Thread 与实现Runnable接口的区别
(2010-03-31 09:48:01)
转载
标签:
java多线程
继承thread
实现runnable
it

此处,以一个简单的卖盘的例子来说明 JAVA多线程 继承Thread 与 实现Runnable接口 的区别!

首先创建2个类

一、第一个是继承Thread

package com.thread.test;

public class MyThread extends Thread

private int ticket=5; //一共5张票
public void run()


for(int i=0;i<50;i++)

if(this.ticket>0)

System.out.println("卖票:ticket= "+this.ticket--);






二、实现实现Runnable接口

package com.thread.test;

public class MyThread1 implements Runnable

private int ticket=5; //一共5张票
public void run()


for(int i=0;i<50;i++)

if(this.ticket>0)

System.out.println("卖票:ticket= "+this.ticket--);






三、创建测试类

如果几个电影院同时卖票,应该一共可以卖5次,因为总共5张票,

第一个测试类

package com.thread.test;

public class Soleticket

public static void main(String[] args)
// TODO Auto-generated method stub
MyThread st1=new MyThread();
MyThread st2=new MyThread();
MyThread st3=new MyThread();

st1.start();
st2.start();
st3.start();

//结果是卖 了 15张票,没有实现资源共享,实际上只有5张票,每个线程都是卖自己的票,没有实现资源共享,

第二个测试类

package com.thread.test;

public class SoleticketRunnabel

public static void main(String[] args)
// TODO Auto-generated method stub
MyThread1 st1=new MyThread1();

//三个线程
new Thread(st1).start();
new Thread(st1).start();
new Thread(st1).start();

//结果是卖 了 5张票,所以说是用Runnable 可以实现 资源共享的卖盘的效果。









运行上面2个类,可以比较出区别,继承Thread 类是卖了 15张票,而实现Runnable 接口的就是卖了 5张票,所以在实际应用中应该首先而实现Runnable 接口方法来做多线程!
以上为转载!!
我绝的Thread也能实现共享啊;
以下为我编写的;
class MyThread extends Thread

private int ticket=5; //一共5张票
public void run()


for(int i=0;i<50;i++)

if(this.ticket>0)

System.out.println("卖票:ticket= "+this.ticket--);





public class Soleticket

public static void main(String[] args)

MyThread st=new MyThread();
Thread st1=new Thread(st);
Thread st2=new Thread(st);
Thread st3=new Thread(st);

st1.start();
st2.start();
st3.start();

这个程序也共享了啊

参考技术A 你好,呵呵,把自己套进去了吧。
人家创建的是实现runnable接口的类创建了3个
你是创建了一个继承thread的,就谈不上资源共享了。
呵呵,明白了吧。
参考技术B 这是许多公司的招聘经常会问。

抽象类和接口的区别如下:

①类继承抽象类,只是其中的一部分的具体方法和抽象方法,实现该接口将不得不实现里面所有的方法。

②在接口的成员变量,抽象类可以有成员变量。

接口在Java中引入来解决这个问题的多重继承。

多线程的继承Thread类与实现Runnable接口。
参考技术C Thread 实现了Runnable接口~~~~
就这一句~~~~~本回答被提问者采纳

以上是关于为啥要实现Runnable接口,来实现多线程?把Thread作为父类则不能呢?的主要内容,如果未能解决你的问题,请参考以下文章

关于java线程实现 Runnable接口的问题?

题目24-多线程两种实现方式

Java多线程runnable

java 创建线程问题 在线等待!

JAVA多线程继承Thread 与实现Runnable接口的相关疑问

002-多线程实现方式threadrunnablecallalethread和runnable对比