zoukankan      html  css  js  c++  java
  • 1.介绍多线程

    多线程

    多线程是用来做什么的,我想举一个例子简单说明一下。

    我正在工作,但是到中午了,饿了,但是去做饭就必须停下手中的工作。

    而做饭又是一件非常耗时的事情,在做饭的时候,工作就处于停滞状态。

    这就是串行程序的执行方式。

    工作 ------> 停止工作 ------> 做饭

    而随着社会的发展,外卖行业的发展,我们可以打电话订外卖。

    做饭本身交给了别人,解放了自己的时间,所以工作是不需要停滞的。

    而线程的出现,往往就是对CPU资源的利用率的问题。

    当然,也有进程本身太过笨重、进程间并行对资源的损耗过大。

    我个人认为,线程的出现,与图形化的发展离不开。

    比如,我要上传一个大的文件,而整个上传的过程,如果是单线程的话,画面会发生停滞,

    只有当上传行为结束,我们才可以继续操作。

    而多线程的出现,等于把某些费时的事情给解放了,你可以边下电影,边听歌。

    我个人认为,想学好多线程,要把以下几个概念给理解请。

    1.进程与线程。

    进程 线程
    进程在我看来,就是一段代码,点击运行在CPU上了,操作系统给分配了内存和进程号(PID),这就是一个进程。而一个进程是可以包括多个线程的,也就是说,进程是线程承载的容器。对于java来说,开启一个java进程,会开辟线程栈、堆、方法区。堆和方法区是所有线程所共享的。 线程就是CPU执行的最小单位。我们知道,CPU是通过时间片轮训方式调动线程资源的。每一个进程至少拥有一个线程。在形象一些,每开辟一个线程,JVM都会分配一个线程栈和一个线程号(TID)。所有线程共享堆与方法区中的资源。

    2.同步与异步。

    同步 异步
    在我看来,就是顺序执行,我要保证中间每一个环节都执行结束,才能结束。 异步就是,我在执行一部分事时,我不关注它的执行结果。就像一个服务员在点餐时,给厨房吆喝一声要做啥就结束了。

    3.并发与并行。

    并发 并行
    并发就是宏观上同时发生,微观上串行。单核CPU上跑的多线程,都是并发的,不是真正意义上的并行。 同时发生同样的事情,就好像我们上学时做课间操一样,在同一个点,好多人同时做同一个动作。

    4.阻塞与非阻塞。

    阻塞 非阻塞
    就好像我们排队买票一样,前边那个人在买票,后面的人都买不了。都得等人家买完后,才可以轮到下一个人买。 我们不需要考虑别人的情况,想啥时候做就立即执行。
  • 相关阅读:
    Zuul转发请求时HttpHostConnectException can't cast to ZuulException问题解决方法
    mysql循环插入千万级数据
    ssh登录原理及免密登录配置
    mysql binlog抽取某个表的数据
    ssh方式请求gitlab需要密码解决方法
    linux使用shell脚本停止java进程
    centos7安装docker-ce
    FutureTask详解
    Boolean.getBoolean用法
    mysql对emoji的支持
  • 原文地址:https://www.cnblogs.com/TimerHotel/p/thread01.html
Copyright © 2011-2022 走看看