作为一个java学习者,这段时间一直在看关于线程的问题。所以总结下来,分享一下,若有错误,希望扫过这篇文章的人指出。在此万分感谢。
一,首先我们谈论线程(Thread),需要与他的近亲:进程(Process)一起比较才能明白。
那么进程(Process)是什么呢?
有人曾这样定义进程:是一个“执行中的程序”。不过我更喜欢用面向对象的概念来定义进程:进程是执行程序的实例。实际中我们使用电脑的一个exe文件就是一个进程,所以我们在电脑某个应用卡死的时候打开任务管理器界面强行关闭该进程。如下:
从更广泛的角度定义进程就是:进程是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
各个进程间是相互独立的。
二,进入正题,线程(Thread)又与进程(Process)有何关联呢?
先定义线程:线程是系统分配处理器时间资源的基本单元。或者说进程之内独立执行的一个单元,其调度单元是线程。
线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除
那为什么要引入线程?
说道这里就又得简单提到“多任务”:多任务处理是指用户可以在同一时间内运行多个应用程序。我们用的Windows、Linus均是支持多任务的。现在的电脑都能多任务运行,宏观上是多个任务同时运行,微观上其实是CPU在每个时间片只能处理一个问题(“这个问题”就是我们提到的线程),但切换的非常快,就感觉是多个任务同时运行了。
所以我们引入线程,是为了实现多任务,多进程,提高CPU的利用率。
PS:我们平常使用的电脑,经常吹嘘什么多线程,除非你的电脑是多核的,那才算是真真的可以实现多线程。如果是单核,那就是忽悠你。
三,java中多线程怎么实现?
java中实现多线程,有两种方式:继承Thread类和实现Runnable接口。
第一种方式:继承Thread类
可以看到输出结果为:
这就是起了双线程。
在CPU中的执行图可抽象为:
第二种方式:继承Runnable接口。
实现结果与第一种方式一样。
以上就是java线程的初步入门知识,后续的深入了解待小白继续更新。