博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java线程入门篇(一)
阅读量:6570 次
发布时间:2019-06-24

本文共 840 字,大约阅读时间需要 2 分钟。

hot3.png

一、线程的相关概念

    1.同步和异步

        用一次方法调用来说:

            同步方法一旦调用开始,便必须等到方法调用返回后,才能继续后面的行为。

            异步方法更像是一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。异步方法通常会在另外一个线程中"真实"地运行。整个过程,不会阻碍调用者的工作。

        示例:

            淘宝上购物,我们只需要把商品加入购物车,付款就好了,其他物流配送的环节都是异步执行的。

    2.并发和并行

        并发:多个任务交替运行

        并行:多个任务平行的运行

        一个CPU的话,肯定是并发。并行只能发生在多个CPU的情况下。

    3.临界区

        临界区来表示一种公共资源或者是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程想要这个资源,就必须等待。

        举例:

            一个办公室只有一台打印机,小名和小刚同时需要打印文件,很显然,只能一个一个来。这里的打印机的例子就是一个临界区。

    4.阻塞和非阻塞

        阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其他所有需要这个资源的线程就必须在这个临界区中进行等待。等待会导致线程挂起,这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其他所有阻塞在这个临界区上的线程都不能工作。

        非阻塞的意思与之相反,他强调没有一个线程可以妨碍其他线程执行。所有的线程都会尝试不断向前执行。

    5.死锁、饥饿 、活锁

        死锁: A车想入库,B车想出库。结果谁也不让谁。这时候就是死锁。

        饥饿: 某个线程由于种种原因无法获得想要的资源,导致一直无法执行。比如他的线程优先级过低,而高优先级的线程不断抢占他的资源,导致低优先级线程无法工作。

            举例:自然界中,母鸟喂食雏鸟时,很容易出现这种情况。由于雏鸟比较多,食物有限,雏鸟之间的竞争可能很激烈,小雏鸟因为经常抢不到食物,可能被饿死。

        活锁:

转载于:https://my.oschina.net/u/1178126/blog/1920733

你可能感兴趣的文章
MySQL Connector to J 8.0 Q&A
查看>>
Mysql纯命令行添加用户
查看>>
MongoDB分片
查看>>
Centos编译安装Nginx
查看>>
【WebApp】离线webapp (android)开发
查看>>
如何做好网站SEO优化,需要会什么?
查看>>
网站建设与管理的基本流程
查看>>
spring上传文件并限制大小配置以及全局异常处理
查看>>
Windows下NDK直接编译编译boost 1.55(X86版本)
查看>>
系统重装后重新配置mysql
查看>>
FUSIONCHART 图例清空解决 ID 占用重复
查看>>
OPPO R17谍照现身 机身采用“叠层流光点彩工艺”
查看>>
基于Docker-compose部署wiki-confluence6.10
查看>>
函数PulseEvent()
查看>>
config.inc.php详细参数介绍
查看>>
1学习之初、约定、认识linux
查看>>
获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)
查看>>
面向VMware vCenter的戴尔管理插件的更新1现在已经发布,支持ESXi 5.0
查看>>
003 about zip command in window system
查看>>
guzz批量更新程序
查看>>