Thread和Runnable区别

本文探讨了Java中Thread类和Runnable接口的区别。Thread是线程的实现类,可以直接启动线程,拥有线程的优先级和守护线程等属性。而Runnable是一个接口,适合用于实现线程执行的逻辑,可以多实现其他接口,更便于数据共享。

类:Thread

线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

常用方法:
1、static Thread currentThread() 返回对当前正在执行的线程对象的引用。
2、String getName() 返回该线程的名称。
3、int getPriority() 返回线程的优先级。优先级范围[MIN_PRIORITY=1 , MAX_PRIORITY=10] 范围内,默认为NORM_PRIORITY=5
4、void interrupt() 中断线程。
5、 void join() 等待该线程终止
6、void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。
注意:先设置为守护线程,后start()启动线程,否则是一个非法异常
7、void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
8、void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

继承:

//一个线程输出 100 个 1~26
public class Test {
	public static void main(String[] args) throws InterruptedException {
		Shu shu = new Shu();
		shu.start();
	}
}

class Shu extends Thread {
	@Override
	public void run() {//重写run方法
		for (int i = 0; i < 100; i++) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			for (int j = 1; j <= 26; j++)
				System.out.print(j + " ");
			System.out.println();
		}
	}
}

接口 Runnable

Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。

设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。

此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。

实现:

//	一个线程输出 100 个 A~Z 
public class Test {
	public static void main(String[] args) throws InterruptedException {
		ZhiMu zhiMu = new ZhiMu();
		Thread thread = new Thread(zhiMu);
		thread.start();
	}
}

class ZhiMu implements Runnable {//实现Runnable接口
	@Override
	public void run() {//重写run方法
		for (int i = 0; i < 100; i++) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			for (int j = 0; j < 26; j++) {
				char c = (char) ('A' + j);
				System.out.print(c + " ");
			}

			System.out.println();
		}
	}
}

区别:

1、单继承:extends Thread,多实现:implements Runnable

2、Thread和Runnable是代理模式
Thread启动线程(start()),Runnable定义线程规范(run())

3、Runnable共享数据更方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值