Thread与Runnable的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thread与Runnable的区别相关的知识,希望对你有一定的参考价值。

开始学线程的时候总会写一些简单的小程序,例如:4个窗口卖20张票。

当然用Thread实现类和Runnable实现类都能实现,但是两者是有异同的:

前者在开启线程的时候还会新开启一个自身的任务,所以用Thread子类创建的线程,会是各个线程交替去执行自己的任务,而非共同执行一条任务。

后者只会创建一个任务,让多个线程去执行一个任务。

 

平时一般用Runnable声明线程。

 

继承Runnable

public class SaleTicketsOfRunnable {
	public static void main(String[] args) {
		Sales s= new Sales();
		Thread t1 = new Thread(s,"一口");
		Thread t2 = new Thread(s,"二口");
		Thread t3 = new Thread(s,"三口");
		Thread t4 = new Thread(s,"四口");
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}
class Sales implements Runnable{
	int tickets = 20;
	String name;
	@Override
	public void run() {
		while(tickets>0){
			System.out.println(Thread.currentThread().getName()+"卖了第【"+this.tickets--+"】张火车票");
		}
	}
}

  继承Thread

public class SaleTicketsOfThread {
	public static void main(String[] args) {
		new Sale().start();
		new Sale().start();
		new Sale().start();
		new Sale().start();
	}
}
class Sale extends Thread{
	private  int tickets = 20;//不加static则是四个线程分别卖自己的20张票
//	private static int tickets = 20;//加了static则是四个线程共同卖20张票
	@Override
	public void run() {
		while(tickets>0){
			System.out.println(this.getName()+"卖了第【"+this.tickets--+"】张火车票");
		}
	}
}

  综上可以看出,Thread继承类创建的对象不能同步;Runnable继承类创建的Thread对象,对象是共享的,可以实现同步。

 

参考:

http://mars914.iteye.com/blog/1508429

http://www.cnblogs.com/snowdrop/archive/2010/08/04/1791827.html

以上是关于Thread与Runnable的区别的主要内容,如果未能解决你的问题,请参考以下文章

多线程——Thread与Runnable的区别

Thread与Runnable的区别

Java多线程中Thread与Runnable的区别

Java中继承thread类与实现Runnable接口的区别

Java中实现多线程继承Thread类与实现Runnable接口的区别

Java并发编程之六:Runnable和Thread实现多线程的区别(含代码)