zoukankan      html  css  js  c++  java
  • 复习笔记02

    1. java ConcurrentModificationException异常原因和解决方法:

       1. 单线程:iterator.remove();

       2. 多线程情况下:iterator.remove() 处理同一个list,也会出问题

    2. Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存),每个线程都有自己的工作内存(类似于前面的高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。

    3. 用volatile修饰之后就变得不一样了:

      第一:使用volatile关键字会强制将修改的值立即写入主存;

      第二:使用volatile关键字的话,当线程2进行修改时,会导致线程1的工作内存中缓存变量stop的缓存行无效(反映到硬件层的话,就是CPU的L1或者L2缓存中对应的缓存行无效);

      第三:由于线程1的工作内存中缓存变量stop的缓存行无效,所以线程1再次读取变量stop的值时会去主存读取。

      那么在线程2修改stop值时(当然这里包括2个操作,修改线程2工作内存中的值,然后将修改后的值写入内存),会使得线程1的工作内存中缓存变量stop的缓存行无效,然后线程1读取时,发现自己的缓存行无效,它会等待缓存行对应的主存地址被更新之后,然后去对应的主存读取最新的值。

      那么线程1读取到的就是最新的正确的值。

    4. 通常来说,使用volatile必须具备以下2个条件:

      1)对变量的写操作不依赖于当前值

      2)该变量没有包含在具有其他变量的不变式中

  • 相关阅读:
    14、打开MySQL数据库远程访问权限
    11、mysql导出数据库表的创建sql语句
    13、自增长主键及字符集的修改
    ASP.NET2.0 Provider模型
    ASP.NET Provider模型(3)
    ASP.NET2.0 ObjectDataSource的使用详解
    ASP.NET2.0快速入门存储用户配置文件
    ASP.NET2.0快速入门--使用母版页创建布局
    ASP.NET2.0 ObjectDataSource的使用详解(3)
    ASP.NET2.0 Provider模型(二)
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/10397147.html
Copyright © 2011-2022 走看看