zoukankan      html  css  js  c++  java
  • Java 并发笔记

    1. 避免一个线程同时获取多个锁。
    2. 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。
    3. 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制。
    4. 对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。

    在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

    valatile的两个作用:
    1.声明变量内存可见性
    当一个线程修改一个共享变量时,另外一个线程总是能读到这个修改后的值

    (1)对于写操作:对变量更改完之后,要立刻写回到主存中。
    (2)对于读操作:对变量读取的时候,要从主存中读,而不是缓存。

    2.禁止指令的重排序
    if (a == null){
    Object a = new Object;
    }
    附:什么是指令重排序?
    CPU在执行指令时,在保证执行结果一致的情况下,对部分代码进行重新排序操作;

    int i = 1;
    int b = 2;
    两个语句执行的顺序可能会交换
    
  • 相关阅读:
    报到开博随笔
    为Windows2008升级系统补丁
    String:本质上是字符数组
    为Windows2008服务器安装.NET Framework 3.0
    设计ShartPoint的组织结构和成员
    中文:一个面向对象的自然语言
    从一个帖子看部分大学生的学习心态
    Enum:枚举
    Array:一组数据的有序集合
    部署SQL Server2008企业版
  • 原文地址:https://www.cnblogs.com/bigorang/p/11320198.html
Copyright © 2011-2022 走看看