Java多线程实现Runnable接口和继承Thread类区别

1 实现Runnable接口

public class MyThread01 implements Runnable {

	private int n = 10; //定义10个包子
	
	@Override
	public void run() {
		while(n>0){
			System.out.println(Thread.currentThread().getName()+"还有"+n+"个包子");
			n--;
		}
	}
	
	public static void main(String[] args) {
		MyThread01 myThread = new MyThread01();
		Thread t1 = new Thread(myThread,"线程A");
		Thread t2 = new Thread(myThread,"线程B");
		t1.start();
		t2.start();
		
	}

}

2 继承Thread类

public class MyThread02 extends Thread{

	private int n = 10; //定义10个包子
	private String name; //线程名
	
	public MyThread02(String name) {
		super();
		this.name = name;
	}

	@Override
	public void run() {
		while(n>0){
			System.out.println(this.name+"还有"+n+"个包子");
			n--;
		}
	}
	
	public static void main(String[] args) {
		MyThread02 t1 = new MyThread02("线程A");
		MyThread02 t2 = new MyThread02("线程B");
		t1.start();
		t2.start();
	}
	
}

运行结果:

①线程B还有10个包子
线程B还有9个包子
线程A还有10个包子
线程B还有8个包子
线程B还有6个包子
线程B还有5个包子
线程B还有4个包子
线程B还有3个包子
线程A还有7个包子
线程B还有2个包子
线程A还有1个包子

②线程A还有10个包子
线程A还有9个包子
线程A还有8个包子
线程B还有10个包子
线程B还有9个包子
线程A还有7个包子
线程A还有6个包子
线程A还有5个包子
线程A还有4个包子
线程A还有3个包子
线程A还有2个包子
线程A还有1个包子
线程B还有8个包子
线程B还有7个包子
线程B还有6个包子
线程B还有5个包子
线程B还有4个包子
线程B还有3个包子
线程B还有2个包子
线程B还有1个包子

区别: 实现Runnable接口线程共享10个包子,继承Thread类的的线程不共享包子,一共输出了30个包子。


猜你喜欢

转载自blog.csdn.net/qq_39403545/article/details/80232679