关于java多线程的创建问题

但丁jk 2017-07-22 03:55:23
通过类继承Thread类和实现Runnable接口可以创建线程,如果我同时继承和实现(如下图),和单继承或者单实现那有什么区别?感觉好像差不多?

package com.caidi.thread;

public class TestThread01 {
public static void main(String[] args){
new Runner().start();
Thread t =new Thread(new Runner());
t.start();
for(int i=0;i<100;i++){
System.out.println("Main: "+i);
}
}
}


class Runner extends Thread implements Runnable {

public void run(){
for(int i=0;i<100;i++){
System.out.println("Runner: "+i);
}
}

}
...全文
154 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨临Lewis 2017-07-22
  • 打赏
  • 举报
回复
之所以有两种创建的方式是为了方便程序员吧,譬如你单实现后还可以再去继承其他的类,说到底也就是有两种方式任你选择而已
hml1993 2017-07-22
  • 打赏
  • 举报
回复
你把线程名字打印出来就能看出其实是创建出两个线程,只是创建方式不一样而已,功能一样
public class Demo {
	public static void main(String[] args) {
		ThreadAndRunnable t = new ThreadAndRunnable("A");
		t.start();
		new Thread(t,"B").start();;
	}

}

class ThreadAndRunnable extends Thread implements Runnable{
	
	public ThreadAndRunnable(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}

	public void run(){
		for(int i = 50;i > 0;i--){
			System.out.println(Thread.currentThread().getName() + i);
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
soton_dolphin 2017-07-22
  • 打赏
  • 举报
回复
你这么写和单纯继承thread或者单纯实现Runnable是一样的。
  • 打赏
  • 举报
回复
其实这两种方式产生的线程基本是一样的,因为Thread类同样也是实现了Runnable类而产生线程的;你可以点进去看看Thread源码看看;所以说两种做法所产生的线程都会抢你的cpu资源;因此从打印内容看不出有什么不一样。一般开发的话都是采用实现Runnable来产生线程,因为你还可能去继承其他类,如果你已经实现了Thread类也就不能再去继承其他类了。
hml1993 2017-07-22
  • 打赏
  • 举报
回复
这样不是创建了两个线程吗

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧