Java 多线程(二)启动线程的三种方式和源码分析

在这里插入图片描述
嗨,好长时间没跟大家见面啦,总算挑出点时间写文章了,写一下多线程吧,后面还会继续更新,文章内容若有问题请指出,万分感谢!好啦,下面就开始今天的课程吧!

1、继承 Thread

实现

class MyThread extends Thread{
	@Override
	public void run() {
		System.out.println("我继承了Thread类");
	}
}
	public static void main(String[] args) {
		MyThread thread1 = new MyThread();
		thread1.start();
	}

运行结果:
在这里插入图片描述

源码分析

Thread 源码
通过创建对象,去初始化一个线程,但它此时并没有启动。
在这里插入图片描述

Thread 源码
实现了 Runnable 接口,但是我们要记住一点,Runnable 它只是一个接口,它并不能去操作一个线程,当然也就不能去启动线程了。

在这里插入图片描述

在这里插入图片描述

2、实现 Runnable

实现

class MyRunnable implements Runnable{
	@Override
	public void run() {
		System.out.println("我实现了Runnable接口");
	}	
}
	public static void main(String[] args) {
		Thread thread2 = new Thread(new MyRunnable());
		thread2.start();
	}

运行结果:
在这里插入图片描述

源码分析

Runnable 源码
run 方法是一个抽象方法,它的作用是用来执行线程执行逻辑的。所以需要线程做什么,我们可以在这里面写。
在这里插入图片描述

Thread 源码
接收一个 Runnable 接口对象从而完成线程初始化
在这里插入图片描述

在这里插入图片描述

3、实现 Callable

实现

class MyCallable implements Callable<String>{
	@Override
	public String call() throws Exception {
		System.out.println("我实现了Callable接口");
		return "执行完毕";
	}
}
public static void main(String[] args) {
	FutureTask<String> futureTask = new FutureTask<String>(new MyCallable());
	Thread thread3  = new Thread(futureTask); 
	thread3.start();
	try {
		System.out.println("Callable 线程的返回结果:" + futureTask.get());
	} catch (InterruptedException e) {
		e.printStackTrace();
	} catch (ExecutionException e) {
		e.printStackTrace();
	}
}

运行结果:
在这里插入图片描述

源码分析

(1)Callable 接口是一个泛型接口,所以在实现的时候需要指定它的类型
(2) call() 方法是有返回值的
在这里插入图片描述
然后我们再去查看一下 Thread 源码,并找不到关于 Callable 的任何信息,那我们怎么去启动线程呢?这时候就出现了 FutureTask

FutureTask 源码
可以发现 public FutureTask(Callable callable) 接收一个 Callable 对象
在这里插入图片描述

然后我们又发现 FutureTask 实现了 RunnableFuture
在这里插入图片描述
接着跟踪 RunnableFuture

RunnableFuture 源码
发现 RunnableFuture 也是实现了 Runnable 接口,这下终于明白为什么 Callable 接口也能实现启动线程了吧!
在这里插入图片描述

讲到这,还没完,请大家看一下黄色箭头所指的地方,它是一个逗号,这是什么意思呢?
答:其实这就是Java中的多实现,大家肯定都知道Java 不支持多继承,但它却可以多实现接口,所以这里用逗号来隔开。

好啦,那么本期就讲到这里,如果有小伙伴喜欢请关注我,多线程及更多精彩内容,将会持续更新,下期见~

在这里插入图片描述

上一篇:Java 多线程《I》— 并发、并行、线程、多线程、进程

下一篇:制作中

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王睿丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值