试想当你熟悉所有的英雄的技能效果和CD时间,那么对线对面英雄并自爆一路其实是一件很简单的事情,试想你不从青铜开始训练,怎么可能从菜鸟变为大神,接进入话题吧,其实我们为什么要学习高并发的知识,其实不难发现,对于传统的ERP系统或者是公司内部使用系统,用到这部分的知识不多,无非是CRUD嘛,但是随着互联网行业的发展,一些Web服务器并发访问量急速的增加,特别是对于电商类的,抢购类项目或游戏类的服务器,数据安全性,准确性显得尤为重要,很难发现很多互联网公司的招聘公告无不一致要求应聘者熟悉线程并发的知识,恰好楼主,最近也是在接触此类的项目,并在慢慢摸索这方面的知识,在看一本叫《JAVA并发编程实践》的书本,因此趁此机会把楼主理解的知识记录在这里。

首先要明确以下几个概念

一,并发与并行

  • 我们知道,并行操作是针对多核CPU的,因此对于有限的CPU下,如何提高程序运行速率,就要采用并发操作(充分利用CPU资源)。

二,临界区

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

三,阻塞(Blocking)和非阻塞(Non-Blocking),同步和异步

  • 阻塞和非阻塞通常用来形容多线程间的相互影响。阻塞是,比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区外进行等待,等待会导致线程挂起。这种情况就是阻塞。此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。
  • 非阻塞允许多个线程同时进入临界区,或者在遇到需要等待的时刻,不等待而选择去做其他的事情

  讲个故事:老王烧开水

  出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

  老王想了想,有好几种等待方式

  1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。-同步阻塞

  老王想了想,这种方法不够聪明。

  2.老王还是用水壶煮水,不再傻傻的站在那里看水开,跑去寝室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就走人。-同步非阻塞

  老王想了想,现在的方法聪明了些,但是还是不够好。

  3.老王这次使用高大上的响水壶来煮水,站在那里,但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他。-异步阻塞

  老王想了想,不会呀,既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢,嗯,得换个方法。

  4.老王还是使用响水壶煮水,跑到客厅上网去,等着响水壶自己把水煮熟了以后通知他。-异步非阻塞

  老王豁然,这下感觉轻松了很多。

  • 同步和异步
  • 同步就是烧开水,需要自己去轮询(每隔一段时间去看看水开了没),异步就是水开了,然后水壶会通知你水已经开了,你可以回来处理这些开水了。
  • 同步和异步是相对于操作结果来说,会不会等待结果返回。
  • 阻塞和非阻塞
  • 阻塞就是说在煮水的过程中,你不可以去干其他的事情,非阻塞就是在同样的情况下,可以同时去干其他的事情。阻塞和非阻塞是相对于线程是否被阻塞。

四,死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)

  • 死锁:简单来说,比如你去面试面试官问:你告诉我什么是死锁,我就录用你,而你回答:你录用我,我就告诉你什么是死锁!
  • 饥饿:饥饿是指某一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行, 比如电梯等人!
  • 活锁:我有资格坐电梯,但是这趟电梯已经满人超载了,我要继续等!

  掌握了这些概念之后,砸门下一阶段就学习一下线程的操作以及状态

转载于:https://www.cnblogs.com/zhuoqingsen/p/8386217.html

线程与并发基础-青铜相关推荐

  1. 并发基础知识 — 线程安全性

    前段时间看完了<并发编程的艺术>,总感觉自己对于并发缺少一些整体的认识.今天借助<Java并发编程实践>,从一些基本概念开始,重新整理一下自己学过并发编程.从并发基础开始,深入 ...

  2. Java并发基础(六) - 线程池

    Java并发基础(六) - 线程池 1. 概述 这里讲一下Java并发编程的线程池的原理及其实现 2. 线程池的基本用法 2.1 线程池的处理流程图 该图来自<Java并发编程的艺术>: ...

  3. java线程抢占式执行,Java并发基础(一)-线程基础

    原标题:Java并发基础(一)-线程基础 只要涉及到线程,其运行结果就是不确定的,虽然说java很早就提供了线程以及并发的支持,但是我们需要知道,线程是完全交给调度器的.有很多同学在编写书上的代码时, ...

  4. 【并发基础】线程的通知与等待:obj.wait()、obj.notify()、obj.notifyAll()详解

    目录 〇.先总结一下这三个方法带来的Java线程状态变化 一.obj.wait() 1.1 作用 1.2 wait()方法到底会让哪个线程阻塞? 1.3 wait(long timeout)方法如何实 ...

  5. 【死磕Java并发】-----J.U.C之线程池:线程池的基础架构

    原文出处:https://www.cmsblogs.com/category/1391296887813967872 『chenssy』 经历了Java内存模型.JUC基础之AQS.CAS.Lock. ...

  6. 并发基础篇(六):线程Thread类的start()方法和run()方法

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

  7. java线程看不进去_Java多线程和并发基础面试问答,看过后你不会后悔

    第一:Java多线程面试问题 1:过程和线程之间有什么不合? 一个过程是一个自力(self contained)的运行情况,它可以被看作一个法度榜样或者一个应用.而线程是在过程中履行的一个义务.Jav ...

  8. JAVA多线程和并发基础面试问答

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在 ...

  9. ***JAVA多线程和并发基础面试问答

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.(校对注:非常赞同这个观 ...

最新文章

  1. 【原创】C# 递归获取指定目录的子目录及其所有文件
  2. 【Machine Learning】OpenCV中的K-means聚类
  3. 中国三大轴承厂是 哪三家?
  4. Mongodb副本集配置
  5. (九)数据结构之“图”
  6. Captcha插件后门分析和修复
  7. 【渝粤教育】国家开放大学2018年春季 0004-21T有机合成单元反应 参考试题
  8. 工作296:el-table使用
  9. idea lombok不生效_Spring Boot 集成 Lombok 让代码更简洁!
  10. 清华大学迎来外籍院长!
  11. (转)淘淘商城系列——商品搜索功能Dao实现
  12. nodejs mysql数据推送_使用Nodejs实现实时推送MySQL数据库最新信息到客户端
  13. IntelliJ IDEA设置代码提示(常用快捷键)
  14. Oracle TDE的数据加密示例并用logminer验证加密效果
  15. 机顶盒系统服务器忙,网络机顶盒卡顿怎么办?教你最新三个方法让系统更流畅...
  16. 破解TexturePacker加密资源
  17. The7 — 响应式多用途 WordPress 主题 免费下载
  18. 面试官问你期望的工资是多少,怎么回答最好?
  19. KOD: Linux 命令行安装
  20. Python Tableau——数据分析招聘岗位的抓取与初步分析

热门文章

  1. 物体检测 | 29篇顶会(刊)论文集
  2. html5 cs js字母验证码,JavaScript生成图形验证码
  3. .net java 开源_为什么说微软开源 .net 也拼不过 java?
  4. WPF中在XAML中实现数据类型转换的两种方法
  5. 洛谷 P1031 均分纸牌【交叉模拟】
  6. SVN遇到Can't convert string from 'UTF-8' to native encoding(转)
  7. 添加毛玻璃的两中方法
  8. 学习API 判断光驱是否为光盘
  9. LintCode初级题——fizz buzz
  10. C通过unixODBC连接数据库