美文网首页程序员
你真的会创建一个线程吗?

你真的会创建一个线程吗?

作者: 勤奋的码农 | 来源:发表于2019-12-24 22:54 被阅读0次
你真的会创建一个线程吗?

在文章开始之前先看一个问题,下图几种创建线程方式分别是什么,它们之间的区别和联系是什么?

你真的会创建一个线程吗?

如果可以轻松回答,那么本文对你来说过于基础,不用往下看啦,如果还有所迷惑,那就和Nauyus一起复习下创建线程的几种方式吧!

如何创建一个线程

Java线程类也是一个Object类,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程:

你真的会创建一个线程吗?

但是这样创建的线程会快速执行结束,因为线程所执行的内容是空的,如果需要线程执行自定义的代码, 有两种方式可以实现,一种是继承Thread类,覆写run方法将线程执行内容放入run方法中,另一种是实现Runable接口,将实现Runable接口的类作为参数传递给Thread类。因为匿名内部类和Java8 Lambda的出现,这两种方式又各有变体,但万变不离其宗,下面我们来看一下。

继承Thread类

第一种方法是继承Thread类,用自定义的run方法覆写父类方法实现传递线程执行代码:

你真的会创建一个线程吗?

继承Thread类——匿名内部类写法

对于那些只需实例化一次的代码如果每次都需要定义一个MyThread也是挺麻烦的,这就有了匿名内部类变体:

你真的会创建一个线程吗?

实现Runable接口

还有一种创建多线程的方法是实现Runable接口,将实现Runable接口的类作为参数传递给Thread类,从而做到传递线程要执行代码的目的:

你真的会创建一个线程吗?

实现Runable接口——匿名内部类

同样,我们可以使用匿名内部类简化代码:

你真的会创建一个线程吗?

实现Runable接口——Lambda表达式

好了到这里代码已经很简化了,但是我们再次看下这段代码:

你真的会创建一个线程吗?

其实除了System.out.println("Runnable running");是我们需要执行的线程体之外其他都是模版代码,那么为什么我们为了传递一行实际有用的代码要把整个类传递进去呢? Java8提出了函数式编程思想,可以将一个函数作为参数直接传递给方法,并可以将函数使用Lambda表达式来简化表达,使用Lambda表达式创建的线程如下:

你真的会创建一个线程吗?

总结

下图总结了创建线程的方式,当然,实际应用中我们更多的使用线程池来创建一个线程,但是也离不开这些基础,更重要的是思想,好了关于线程池的部分我们以后文章再见。

你真的会创建一个线程吗?

粉丝福利

最近我也根据上述的技术体系图搜集了几十套阿里、头条、蚂蚁金服等公司19年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。相信它会给大家带来很多收获。(更全的内容和资料,在文末获取)

Java架构进阶资源

你真的会创建一个线程吗?

分析源码

你真的会创建一个线程吗?

分布式架构

你真的会创建一个线程吗?

上图中的资料都是我精心录制视频,感兴趣的可以到我的Java学习圈子: 免费获取。希望能够在你接下来即将应对的的面试过程中能够尽到一份绵薄之力。

相关文章

  • 你真的会创建一个线程吗?

    在文章开始之前先看一个问题,下图几种创建线程方式分别是什么,它们之间的区别和联系是什么? 如果可以轻松回答,那么本...

  • FW-Handler

    问题1 子线程里可以创建Handler吗 子线程里没prepare looper时创建Handler会抛出Runt...

  • Android 进阶之刁钻问题汇总

    问题一:Android 中子线程真的不能更新 UI 吗? 参考回答:在 onCreate() 方法中创建的子线程访...

  • Java 并发编程——多线程基础

    你真的了解线程吗?创建线程的常用方式有哪些?为什么不能重复调用 Start 方法?什么是单继承的局限?生产者与消费...

  • iOS GCD 常用功能

    获取主队列 异步执行 会开新线程 创建串行队列 开一个线程 顺序执行 1 和 2 创建并行队列 创建多个线程 ...

  • iOS GCD有几种队列

    GCD:其实就是不用我们创建线程池GCD已经帮我们创建好了,他会帮我们创建线程,销毁线程决定着你的代码块将在哪个线...

  • Executor家族-ThreadPoolExecutor

        创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。...

  • 多线程

    创建一个多线程 创建多线程-继承线程类 创建多线程-实现Runnable接口 创建多线程-匿名类code

  • 线程池

    线程池的定义 减少资源创建 => 减少内存开销,创建线程占用内存 降低系统开销 => 创建线程需要时间,会延迟处理...

  • 9.jdk线程池详解及实际运用

    4.线程池 参数 1)corePoolSize: 线程池的基本大小,当提交一个任务到线程池中,线程池会创建一个线程...

网友评论

    本文标题:你真的会创建一个线程吗?

    本文链接:https://www.haomeiwen.com/subject/qllqoctx.html