Thread与Runnable的区别

时间:2022-09-04 17:29:06

开始学线程的时候总会写一些简单的小程序,例如: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