1、方法内部的私有变量是线程安全的,实例变量是线程不安全的。

2、A线程先持有object对象的lock锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法。

3、A线程先持有object对象的lock锁,B线程如果调用object对象中的synchronized类型的方法,则需要等待,也就是同步。

4、脏读:在多线程中,发生脏读的情况是在读取实例变量时,此值已经被其它线程修改过。

5、锁重入:在使用synchronized时,当一个线程得到一个对象锁后,再次请求此对象锁时可以再次得到该对象的锁。

      这也证明,在一个synchronized方法/块的内部调用本类的其它synchronized方法/块时,是可以得到锁的。

      当存在父子类继承关系时,子类可以通过“可重入锁”调用父类的同步方法

6、当一个线程执行的代码出现异常时,其所持有的锁会自动释放

7、同步不可以继承,父类的同步方法,子类重写之后也要加上synchronized才会有同步效果

8、同步代码块,同步代码块比同步方法拥有更小纬度的同步,所以拥有更高的执行效率

9、同步代码块和同步方法一样,都是锁定的当前对象

10、多个线程调用一个同步方法的顺序是随机的

11、静态同步方法持有的是Class锁。

12、在JVM中具有String常量池缓存的功能,如果使用字符串变量作为锁,当两个变量的值相同时,就会造成两个线程持有相同的锁,后面的线程无法执行。这就是String常量池带来的问题

13、只要对象不变,即使对象的属性发生改变,运行的结果还是同步。

14、volatile关键字的作用是使变量在多个线程中可见。

15、volatile和synchronized的比较

  1、volatile是线程同步的轻量级实现,性能比synchronized好,volatile只能修饰变量,synchronized可以修饰方法和代码块。

  2、多线程访问volatile不会发生阻塞,synchronized会阻塞

  3、volatile能保证数据的可见性,但不能保证原子性。synchronized可以保证原子性,并可以间接保证可见性。

16、变量在内存中的工作过程如下图

  

17、可以使用原子类Atomic来保证i++等操作的原子性

  

  

java多线程编程核心技术(二)--对象及变量的并发访问的更多相关文章

  1. Java多线程编程核心技术(二)对象及变量的并发访问

    本文主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题.阅读本文应该着重掌握如下技术点: synchronized对象监视器为O ...

  2. Java多线程编程核心技术(三)多线程通信

    线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...

  3. Java多线程编程核心技术(一)Java多线程技能

    1.进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程. 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位. 举个例子: 打开你的计算机上的任务管 ...

  4. Java多线程编程核心技术---对象及变量的并发访问(二)

    数据类型String的常量池特性 在JVM中具有String常量池缓存的功能. public class Service { public static void print(String str){ ...

  5. Java多线程编程核心技术-第2章-对象及变量的并发访问-读书笔记

    第 2 章 对象及变量的并发访问 本章主要内容 synchronized 对象监视器为 Object 时的使用. synchronized 对象监视器为 Class 时的使用. 非线程安全是如何出现的 ...

  6. Java多线程编程核心技术---学习分享

    继承Thread类实现多线程 public class MyThread extends Thread { @Override public void run() { super.run(); Sys ...

  7. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  8. 《Java 多线程编程核心技术》- 笔记

    作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...

  9. 《java多线程编程核心技术》不使用等待通知机制 实现线程间通信的 疑问分析

    不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08       ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ...

  10. 《Java多线程编程核心技术》知识梳理

    <Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...

随机推荐

  1. mac更改本地mysql登陆密码

    安装完mysql 之后,登陆以后,运行任何命令,提示 You must SET PASSWORD before executing this statement解决办法. step 1: SET PA ...

  2. HBuilder发行原装安装包操作记录

    1.在左侧"项目管理器"中选择项目: 2.点击菜单栏中的"发行-->发行为原生安装包": 3.在弹出的App云端打包中填写相关信息: IOS开发者证书配置 ...

  3. ASP.NET Core&EF 笔记

    首先创建Asp.net Core项目,然后通过 NuGet 安装 EntityFrameworkCore: Microsoft.EntityFrameworkCore.SqlServer Micros ...

  4. PMBOK项目管理九大知识领域和五大流程 --美国IT项目管理硕士笔记(二)

    PMBOK 项目管理 九大知识领域和五大流程 PMI   Project Management Institute.PMI 是世界上最大的非盈利机构,是项目管理领域的领导者.PMI制定项目管理行业标准 ...

  5. iframe子页面让父页面跳转 parent.location.href

    if ($roleNum < 9) { echo "<script > parent.location.href='admin_login.php' </script ...

  6. Tcl之Math

    expr is for Tcl to do math operations. It takes all of its arguments ("2 + 2" for example) ...

  7. CPU位数、操作系统位数、机器字长、C/C++基本数据类型长度

    1.CPU位数=CPU中寄存器的位数=CPU能够一次并行处理的数据宽度(位数)=数据总线宽度: //现在的计算机处理器一般都是64位,这是硬件的事. 2.CPU为了实现其功能设计了指令集,即是CPU的 ...

  8. Crash (computing)

    In computing, a crash (or system crash) occurs when a computer program, such as a software applicati ...

  9. 梦想CAD控件打印相关

    一.打印设置 在顶部快速访问工具栏单击打印按钮或者直接输入PLOT命令或者点击打印控制的打印设置按钮打开打印对话框.c#代码实现如下: //打印设置 private void Print1() {   ...

  10. 04C语言输入输出

    C语言输入输出 输入字符getchar() #include <stdio.h> int main(){ putchar(getchar()); putchar(getchar()); ; ...