欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时5:Thread与Runnable关系

程序员文章站 2022-05-05 22:48:56
...

经过一系列的分析之后可以发现,在多线程的实现过程之中已经有了两种做法:Thread类、Runnble接口,如果从代码的结构本身来讲肯定使用Runnable是最方便的,因为其可以避免单继承的局限,同时也可以更好的进行功能的扩充。
但是从结构上也需要来观察Thread与Runnable的联系,打开Thread类的定义:

public class Thread extends Object implements Runnable {}

发现现在Thread类也是Runnable接口的子类,那么在之前继承Thread类的时候实际上覆写的还是Runnable接口的run()方法,于是此时来观察一下程序的类结构。

class MyThread implements Runnable { // 线程的主体
	private String title ;
	public MyThread(String title) {
		this.title = title ;
	}
	@Override
	public void run() { // 线程的主体方法
		for (int x = 0; x < 10; x++) {
			System.out.println(this.title + "运行,x = " + x) ;
		}
	}
}
public class ThreadDemo {
	public static void main(String[] args) {
		Thread threadA = new Thread(new MyThread("线程对象A"));
		Thread threadB = new Thread(new MyThread("线程对象B"));
		Thread threadC = new Thread(new MyThread("线程对象C"));
		threadA.start(); // 启动多线程
		threadB.start(); // 启动多线程
		threadC.start(); // 启动多线程
	}
}

阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时5:Thread与Runnable关系
多线程的设计之中,使用了代理设计模式的结构,用户自定义的线程主体只是负责项目核心功能的实现,而所有的辅助实现全部交由Thread类来处理。
在进行Thread启动多线程的时候调用的是start()方法,而后找到的run()方法,当通过Thread类的构造方法传递了一个Runnable接口对象的时候,那么该接口对象将被Thread类中的target属性所保存;在start()方法执行的时候会调用Thread类中的run()方法,而这个run()方法去调用Runnable接口子类被覆写过的run()方法。
多线程开发的本质实质上是在于多个线程可以进行同一资源的抢占,那么Thread主要描述的是线程,而资源的描述是通过Runnable完成的。
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时5:Thread与Runnable关系
范例:利用卖票程序来实现多个线程的资源并发访问

package cn.mldn.demo;

class MyThread implements Runnable { // 线程的主体
	private int ticket = 5 ;
	@Override
	public void run() { // 线程的主体方法
		for (int x = 0; x < 100; x++) {
			if (this.ticket > 0) {
				System.out.println("卖票,ticket = " + this.ticket --) ;
			}
		}
	}
}
public class ThreadDemo {
	public static void main(String[] args) {
		MyThread mt = new MyThread() ;
		new Thread(mt).start(); // 第一个线程启动
		new Thread(mt).start(); // 第二个线程启动
		new Thread(mt).start(); // 第三个线程启动
	}
}

通过内存分析图来分析本程序的执行结构。
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时5:Thread与Runnable关系

推荐阅读