大家好,我是IT修真院深圳分院第5期的学员,一枚正直纯洁善良的Java程序员
今天给大家分享一下,修真院官网Java任务1基础部分的多线程讲解。
1.背景介绍
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。
具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程, 进而提升整体处理性能。
具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。
在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。
具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
2.知识剖析
Java中的线程实现:
1.继承Thread类
在java.lang包中定义, 继承Thread类必须重写run()方法。创建好了自己的线程类之后,就可以创建线程对象了,然后通过start()方法去启动线程。
注意,不是调用run()方法启动线程,run方法中只是定义需要执行的任务。
如果调用run方法,即相当于在主线程中执行run方法,跟普通的方法调用没有任何区别,此时并不会创建一个新的线程来执行定义的任务。
2.实现Runnable接口
在Java中创建线程除了继承Thread类之外,还可以通过实现Runnable接口来实现类似的功能。实现Runnable接口必须重写其run方法。
事实上,查看Thread类的实现源代码会发现Thread类是实现了Runnable接口的。
在Java中,这2种方式都可以用来创建线程去执行子任务,具体选择哪一种方式要看自己的需求。
直接继承Thread类的话,可能比实现Runnable接口看起来更加简洁,但是由于Java只允许单继承,所以如果自定义类需要继承其他类,则只能选择实现Runnable接口。
3.使用ExecutorService、Callable、Future实现有返回结果的多线程
线程的状态
创建(new)状态: 准备好了一个多线程的对象
就绪(runnable)状态: 调用了start()方法, 等待CPU进行调度
运行(running)状态: 执行run()方法
阻塞(blocked)状态: 暂时停止执行, 可能将资源交给其它线程使用
终止(dead)状态: 线程销毁
3.常见问题
进程与线程之间的区别
4.解决方案
进程与线程
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。
线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。
所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。
5.编码实战
6.扩展思考
Thread和Runnable的区别
因为Thread本来就是实现了Runnable,包含Runnable的功能是很正常的啊!!
至于两者的真正区别最主要的就是一个是继承,一个是实现;其他还有一些面向对象的思想,Runnable就相当于一个作业,而Thread才是真正的处理线程。
我们需要的只是定义这个作业,然后将作业交给线程去处理,这样就达到了松耦合,也符合面向对象里面组合的使用。
另外也节省了函数开销,继承Thread的同时,不仅拥有了作业的方法run(),还继承了其他所有的方法。
综合来看,用Runnable比Thread好的多。
7.参考文献
文章链接:https://blog.csdn.net/u013755987/article/details/51855098
文章作者:开心coding开心playing
文章链接:https://www.cnblogs.com/yjd_hycf_space/p/7526608.html
文章作者:鸿燕藏锋
8.更多讨论
多线程的意思就是多个线程一起去协同完成一个大的任务,通过充分去共享资源来达到提升效率的一种编程思想。当我们使用单线程的时候,一次性只能完成一个任务或者一个细节,而且任务或者细节之间有着严格的秩序。但是在面对大量不相关的任务或者细节的时候,我们可以使用多线程来一次性执行多个任务或者细节,以达到提升效率的效果。