这篇“java进程和线程该怎么理解”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java进程和线程该怎么理解”文章吧。
一、进程和线程的含义
进程:进程是拥有资源的基本单位。
线程:线程是CPU调度的基本单位。
二、举个例子
☛ 比如我们手机有两个进程要进行,一个是便签,另一个是绝地求生。
☛ 便签进程运行要打开保存文本的文件,这里的“打开文件”我们就叫它资源;绝地求生进程要通过监听用户按键事件,这里的“监听用户按键事件”叫做它的资源。
☛ 我们都知道便签软件有自动保存的功能这个功能在t1线程中执行,用户编辑文本在t2线程中执行;绝地求生假设也有两个线程t3和t4,t3线程负责QE 歪头,t4线程负责开枪。上边我所给出的概念是『线程是CPU调度的基本单位』CPU在调度的时的基本单位不是打开便签和绝地求生两个进程,而是t1、t2、t3、t4四个线程。
图解:
★ 注意:一个进程至少要有一个线程
☛ 如果一个进程没有多线程,你玩绝地求生的时候怎么能边歪头边射击呢?单线程只能干一件事,事件不能并发进行,浪费 CPU 资源。所谓的多进程就是绝地求生运行在后台的同时,你使用便签进行文字记录。进程是一个软件在运行,线程就是执行进程中的线程代码片段。
三、线程池
概念:
① 有了多线程编程为何还要引进线程池的概念呢?
线程池对于我们开发者创建来说很简单方便,但是对服务器来说负担很沉重,每个用户请求登录软件都要开启一个线程,创建的线程就会很多,你想想那么多的线程去竞争 CUP 资源,持续切换,这个 CUP 的调度不是要累死的节奏吗?为了解决这个问题,就引进了线程池的概念,通过线程池提前创建一定数量的线程,不用等任务来了在创建,提前创建线程的作用就是当系统有任务来了之后就直接去执行任务。如果有任务来了,线程池的线程就会去执行任务,执行完后不销毁直接回到线程池等待执行下一个任务。我们所说的线程就是代码的执行,动态创建的。
② 线程的创建是通过 .start 开启的,一旦开启线程就会自动执行 run 方法。那么一个新的问题来了,任务还没来呢?提前创建一个线程之后直接执行 run 方法了。
其实线程池还有重要的一点,就是当线程池刚创建时,让其进入堵塞状态,等待系统任务的到来;如果任务来了,我们就把第一位线程同学叫醒拿着老师的任务去干活。
③ 怎么让线程池进入堵塞状态呢?
BlockingQueu 作为线程容器,可以为线程同步提供有力的保障。BlockingQueue 很容易理解,它就是一个容器,用来存放系统的任务的。线程池的线程调用它的 take() 方法取出任务进行执行,如果 BlockingQueue 没有可执行任务,该线程就会阻塞;该线程可以通过调用 put 方法放入任务,如果任务满了线程也会阻塞。
图解:
就是说在线程池中的每个 Run 方法中都要有一个循环判断 BlockingQueue 有没有可执行的任务,如果有就去执行,执行完回来再 BlockingQueue 中继续获取任务,如果 BlockingQueue 没有可执行任务了,线程就处于阻塞等待状态。
以上就是关于“java进程和线程该怎么理解”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。