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

时间: 2024-10-11 17:28:30

Thread与Runnable的区别的相关文章

Thread 和Runnable的区别

Thread 和Runnable 的区别 Thread类 在java中可有两种方法实现度线程,一种是继承Thread类,一种是实现Runnable接口.Thread类是在java.lang包中定义的.一个类只要继承了Thread类,并覆写了本类的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这就是此方法的局限性. 但是,此时结果很有规律,先是第一个对象执行,然后第二个对象执行,并没有相互运行.在JDK的文档中可以发现,一旦调用start()方法.下面启动start()方法启动

多线程——Thread与Runnable的区别

首先,从使用形式上,使用Runnable实现多线程更好,因为避免了单继承问题,但除了这一点之外,Thread和Runnable之间也存在一些联系.观察Thread类的定义形式: public class Threadextends Objectimplements Runnable 原来Thread类是Runnable接口的子类,那么Thread类也应该覆写了run()方法. @Override public void run() { if (target != null) { target.r

java线程-Thread和Runnable的区别

进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小. 线程和进程一样分为五个阶段:创建.就绪.运行.阻塞.终止. 多进程是指操作系统能同时运行多个任务(程序). 多线程是指在同一程序中有多个顺序流在执行 在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. Thread类是在java.lang包

并发编程之多线程基础-Thread和Runnable的区别及联系(二)

上篇文章讲述了创建线程的常用方式 本篇主要分析一下Thread和Runnable两种方式创建线程的区别及联系 联系: ?Thread类实现了Runable接口. ?都需要重写里面Run方法. 区别: ?Thread方式不支持多继承,Runnable方式支持多个实现 ?Runnable更容易实现资源共享,能多个线程同时处理一个资源. 疑惑分享: 本人在理解他们区别的时候 考虑到Thread类本身就是Runnable的实现类 所以产生了一个疑惑:- 为什么Runnable可以实现共享而Thread却

Thread 和 Runnable 的区别

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口: Thread类是在java.lang包中定义 的.一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了, 但是一个类只能继承一个父类,这是此方法的局限. 但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行.在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法.下面启动start()方法启动线程: 这样程序可以正

Thread和Runnable的区别

1.  首先是使用上的区别,先看代码: class MyThread extends Thread { @Override public void run() { System.out.println("do things"); } } class MyRunnable implements Runnable { @Override public void run() { System.out.println("do things"); } } 可以看到使用Thre

Java 中Thread 和Runnable的区别

转:http://blog.csdn.net/wwww1988600/article/details/7309070 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限. 两种实现方式的区别和联系:    在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现

Java并发实现一(并发的实现之Thread和Runnable的区别)

package com.subject01; public class ThreadOrRunnable { public static void main(String[] args) { System.out.println("Thread输出内容:"); // 三个线程为三个不同的对象资源,资源无法得到共享.由于不是同一个对象,所以也不会存在线程安全的问题 new ThreadDemo().start(); new ThreadDemo().start(); new Thread

Java中的Thread与Runnable的区别

1.thread不能设置共享资源.runnable可以设置共享资源 2.代码风格与结构,ruannbale更好些 3. public class TestThread extends Thread { private int count = 5; @Override public void run() { for(int i=0; i<10; i++) { if(this.count>0) { System.out.println(Thread.currentThread().getName