多线程程序就好像一个海王,所有线程都在它的鱼塘且互相不知道别的存在。

多进程与多线程有着本质的区别,每个进程都拥有自己的一套变量,而线程则共享数据。线程最简单的3个状态分别是:New(新建),Runnable(可执行),Blocked(阻塞)。当用new创建一个线程时,这个线程还没有开始运行,它的状态便是New;一旦调用start方法,线程就会处于Runnable状态,只不过它可能在运行也可能并没有运行,它不一定始终保持运行,可能会小睡一会儿以让其他线程运行。这依赖于线程调度器,它会决定哪个线程运行哪个线程被踢出,而我们不能很好地保证。线程调度器也可能因为某些原因让某些线程暂时处于不可运行的状态,即为阻塞。

当多线程需要共享同一对象而且都有可以修改对象状态的方法时,常会引发竞态条件(race condition),会引发数据的损毁。例如一个典型的问题——丢失更新。举一个简单的例子,线程A和线程B都可以对某一个整型数据进行读写。A有三个步骤分别是读取,将读出来的值+1,写入;B有三个步骤分别是读取,将读出来的值+2,写入;当线程A执行时,读取的值为0,计算应该写入的值为1,这时,线程调度器将A踢出了,B开始执行。由于A还没有写入,因此B读取的值也为0,计算应该写入的值为2,于是这个数据的值变为了2,这时候,线程调度器又随机安排A执行,而A并不知道刚刚B做了什么,它就像睡着了失去了意识,睡醒之后继续工作,将1写入数据,于是这个数据的值变为了1,此时线程B刚刚对数据的更新完全消失了,这便是“丢失更新”。

这种问题可以使用同步机制来解决,给对象上锁,确保使任何时刻都只有一个线程进入对象,并且在该线程执行结束前不会将钥匙交给其他线程。

Java小知识之海王多线程相关推荐

  1. java小兔跳铃铛,Java小知识 - 顾小兔2018的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java小知识 [TOC] (1)三种读取文件方法 URL url = this.getClass ().getResource ("/a.txt"); Resources.asC ...

  2. 【Java】每日一点Java小知识 --- day6

    每日一点Java基础小知识 - day6 欢迎来到叮当猫学编程的Java基础小知识系列~在这里,你将会看到叮当猫每日关于Java的基础知识总结,欢迎大家的点赞关注喔 方法重载: 被重载的方法必须改变参 ...

  3. java小知识_java小知识点简单回顾

    1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...

  4. (转载)JAVA小知识

    1.    数组有没有length()这个方法? String有没有length()这个方法? 答:数组没有length()这个方法,有length的属性. String有length()这个方法. ...

  5. 【java日常知识3.2】多线程

    课程链接: https://www.bilibili.com/video/BV1fQ4y1i7E3?p=15&spm_id_from=pageDriver 并发与并行 线程与进程 线程调度 1 ...

  6. java小知识课前演讲_演讲技巧小贴士---记录

    演讲技巧小贴士-1 有趣的演讲演讲要讲求寓教于乐.不是指做演讲时要像猴子一样又蹦又跳,但是同文章或杂志相比,人们期望在演讲中感受到你的激情,而不是枯燥无味的背诵. 放慢速度紧张或没经验的演讲者更容易在 ...

  7. Java小项目——聊天室(多线程版本)

    目录 1. 前言 2. 功能实现 3. 模块划分 4. 功能分析 4.1 前期分析 4.2 具体实现 5. 使用技术 6. 代码 1. 前言 之前写过单线程版本的聊天室,这次对之前的版本进行扩展与优化 ...

  8. (11.06)Java小知识

    最近由于课程变化,学习计划也跟着改动,留给我写博客的时间也越来越少.今天晚上没有课,抽空过来图书馆写一写,许久不写感觉都有点陌生了! 今天要和大季家分享的衔接了上一篇博客,是关于方法的嵌套调用与递归调 ...

  9. Java小知识-----Map 按Key排序和按Value排序

    Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...

最新文章

  1. python(1) - 输入和输出
  2. 搭建Mysql-proxy实现主从同步读写分离
  3. 这四种情况下,才是考虑分库分表的时候!
  4. python non utf 8_Python 一个关于字符编码的诡异问题(Non-UTF-8 code starting with '\xe5')...
  5. 安徽省二级c语言笔试样题,安徽省二级C语言程序设计笔试样题1
  6. 简单判断用户重复登录,记录一下
  7. 操作系统知识点总结以及期末考试考点
  8. JavaScript实现递归楼梯问题(迭代解决方案)算法(附完整源码)
  9. 谈谈我的编程之路---WAMP(二)
  10. 从percona server 5.7换到mariadb 10.2
  11. Ansible中的playbook详解
  12. 下面哪个进制能表述 13*16=244是正确的?)[中国台湾某计算机硬件公司V2010年5月面试题]...
  13. java获取不重复随机数_java实现生成不重复的随机数,可循环利用
  14. pandas DataFrame 根据多列的值做判断,生成新的列值
  15. php抖音跳转地址,PHP如何实现解析抖音无水印视频
  16. java myqq ui_GitHub - ANDRYHU2020/myqq: Java版SWing“高”仿QQ即时通聊天系统
  17. 微信小游戏开发新手教程14-整合到一起,做出你的小游戏
  18. android 沉浸式状态栏导致布局被遮挡,沉浸式状态栏导致华为手机虚拟按钮被遮挡的解决办法...
  19. html怎么自动弹出模态框,纯CSS实现带点击模态框外部自动关闭的模态框
  20. [UE4]Stat命令

热门文章

  1. 湖北师范大学计算机考研资料汇总
  2. yii2 controller behaviors 函数的 那些事儿
  3. 使用mac搭建vue脚手架项目
  4. Windows 8.1中添加美式键盘
  5. java并发-JUC
  6. 学Linux云计算,怎么选择合适的机构?
  7. 梳子刻字刻什么好_校园石阶上被刻了1700多个汉字,这次网友却说好
  8. 【人工智能】 2019年-中国计算机学会推荐国际学术会议和期刊目录(八)
  9. OpenCV探索之路(二十六):如何去除票据上的印章
  10. 字节跳动人事大调整,“接班”张一鸣的为什么是他?