前言
在我们的工作中,我们可以在许多情况下使用程线技术,当我们采访时,程线技术基本上是必须的。今天,我将从程线的实施和程线的生命周期进行全面的解释和分析,帮助大家更好的去解线和程科技。
概念
让我们首先了解离线程和程:之间的概念和区别
1.什么正在进入程
进入程是由计算机执行程序列的应用。当你运行一个程序列时,你也完成了一个到程的启动(比如启动微信)。如图所示
2.什么是程线
程线是在程,独立运营的一条线路,而在程,它可以由一条或多条程,线组成,但一条程线只能对应一条进入程的线路
如何打造程线
有三种方法可以创建继承线程类的程:线,实现可运行接口,或者通过可调用和未来创建程线。具体的程创建如下:
1.继承线程类
让我们看看通过代码继承Thread类来创建行程的具体步骤:
首先,我们需要定义一个类来集成线程类。继承之后,我们需要重写线程类的run()方法。代码如下:
然后我们调用行程类对象的start()方法来启动行程,代码如下:
运行结果如下:
2.实现可运行接口
我们还可以通过实现Runnable接口来创建一个行程类,如下所示:
首先,我们需要创建一个类来实现Runnable接口。同样,我们需要重写run()方法
然后我们创建一个Runnable实现类的对象,并使用这个实现类的对象作为线程类的目标对象来创建一个行程。最后,线程类的对象是真正的行程对象。运行start()方法以开始程线
结果如下:
3.创建通过可呼叫和未来的程线路
首先创建一个类来实现可调用接口并重写call()方法
然后使用FutureTask包装我的可调用对象。类似地,使用FutureTask类对象作为线程类的目标对象来创建一个程线,并从start()方法开始。
通过上面的例子,我们发现我们重写了call()方法而不是run()方法,并且还可以自定义返回值。另一个值得注意的问题是FutureTask实际上实现了Runnable类并继承了Future接口。显然,未来任务具有两者的双重特征。程线的生命周期
程线的生命周期包括五种状态:新状态、就绪状态、运行状态、阻塞状态和破坏状态。
1.新状态
我们使用new()方法使它有自己的内存空间,所以new是程线的新状态
2.就绪状态
从上面的例子可以看出,当我们调用start()方法时,我们进入了就绪状态。请注意,此时程不会立即执行该行,而是等待CPU为其分配资源,并在获得CPU资源后开始执行。这是面试官经常问的一个问题。
3.操作状态
当线程在获得CPU资源后进入运行状态。在这里,我将集中讨论程,正在运行的州线,在那里,采访者经常大惊小怪。
因为程的跑步路线非常复杂,它可能会变得准备好,受阻或死亡。
当run()方法被执行时,如果线路程在运行的程中失去了CPU资源(例如调用yield()方法),线路程将暂停运行,因为线路程已经从运行状态改变为就绪状态。
如何将程线从运行状态更改为就绪状态?
当运行线路程调用睡眠方法时,它将主动放弃被占用的系统资源
当运行的线路程调用阻塞的IO方法时,如果它一直在等待该方法返回值,它将导致线路程被阻塞。
调用yield()方法会暂停当前正在运行的程线
程线正在等待通知
程线的暂停方法被称为暂停程线
当然,除了在运行状态下将线路程改变为就绪状态外,它还可以直接将运行状态下的线路程改变为毁坏状态,例如,在线路程有一个异常或者调用了stop(),desyory()等方法。
4.阻塞状态
如果执行sleep()方法,则线路程将进入阻塞状态。当然,这不仅仅是因为调用了睡眠方法,例如,线路程在等待输入/输出设备时将进入阻塞状态。
5.销毁状态
在程, 当线,行动结束或被迫终止时,程线进入了破坏状态。当然,在运行程,的过程中也存在上述异常情况,如JVM的异常结束、停止调用()等。所有这些都会使程线进入被摧毁的状态。请注意,程线在被摧毁的状态下无法恢复。如果强制调用start()方法,将引发一个异常。
完整的程生命周期图如下:
卸载最后
希望通过本文能带大家更好的去了解线程技术、线程与进程的区别、线程的三个实现方法和他们的区别以及线程的生命周期,帮助大家在工作中能更好的去开发程序。
欢迎关注我们!
部分文字与图片来源于网络,如有版权请联系删除!