多线程相关

多线程的特性

原子性、可见性、有序性

原子性

即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 

解决方案:
一般使用 synchronized 或者 Lock 这种加锁的方式解决多线程原子性问题。当另一个线程需要获取主内存中的某个变量去进行操作的时候,必须先获取锁,否知就需要等待其他线程将锁释放,再获取到锁之后再进行操作。这种情况就保证了另一个线程的操作已经完成,那么对于那一个线程而言,他的操作就是原子性的操作,在他操作期间,不会有其他线程对他加锁的数据进行更改。

可见性

当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。  

解决方案:
一般使用 volatile 解决多线程的可见性问题。 volatile 修饰的变量进行改变之后,将直接修改主内存而不是这个线程所的工作内存,并且通知其他工作内存该变量失效,逼迫其他内存也只能从主内存中获取这个变量。从而实现更新对其他线程可见。

有序性

程序执行的顺序按照代码的先后顺序执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 11,384评论 4 56
  • 线程基本知识 什么是线程安全性?当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么可以认为这个类是线程安...
    Cheava阅读 1,053评论 0 1
  • 前言 本篇文章介绍一些多线程的相关的深入概念。理解后对于线程的安全性会有更深的理解。 先说一个格言,摘自Java核...
    传奇内服号阅读 291评论 0 1
  • 20-30岁是人生最关键的10年,在这10年我们有无限的活力,无限的激情,无限的动力.... 然而,虽然20岁是最...
    莫安_7fd1阅读 241评论 0 0
  • 最近一段时间,《死神/境·界》的真人版引发了不少粉丝的关注。而在作品当中出演重要角色阿散井恋次的,是人气演员早乙女...
    二次元冒险团阅读 505评论 0 0