多线程系列(一)
来源:互联网 发布:js if语句的嵌套 编辑:程序博客网 时间:2024/05/17 08:58
1、线程安全的概念
当多个线程同时访问同一个某一个类时,这个类始终能表现出正确的行为,那个整个类就是线程安全的。
synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为“互斥区”或"临界区"
执行之后得到结果并不是我们预期的,我们预期的结果应该是4、3、2、1、0。
下面是我们加上锁
如图所示,最终的结果是跟我们预期一样的,但是线程顺序跟我们源代码顺序不一样。这是因为这个是由CPU分配顺序决定的,跟源码顺序没有任何关系。
原理分析
Java 内存模型把 Java 虚拟机内部划分为线程栈和堆。这张图演示了 Java 内存模型的逻辑视图。
每一个运行在jvm里面的线程都有一个线程栈,一个线程只能访问自己的线程栈。一个线程创建自己的本地变量对其他线程是不可见的,只有自己可以看见。即使两个线程运行相同的代码,这两个线程仍然在自己的线程栈中创建自己的本地变量。
heap上放的是java创建的所有对象,无论是哪个对象创建的。一个对象的成员变量会随着这个对象自身存放在堆上, 不管这个成员变量是原始类型还是引用类型。
静态变量也随着类一起放在堆上。
放在堆上的对象可以被持有该对象的引用的线程访问。当线程访问一个对象时它也可以访问该对象的成员变量。这就是为什么造成Mythread1是线程不安全的。
0 0
- 多线程系列(一)
- 多线程系列基础(一)
- 多线程学习系列:(一)前言
- 多线程入门系列(一):内容简介
- java多线程系列----------- 终结任务(一)
- 多线程入门系列(一):内容简介
- java多线程系列(一)基础概念
- java学习系列2(多线程一)
- 多线程系列(一)
- 多线程系列:一介绍
- 多线程系列一
- Java多线程干货系列—(一)Java多线程基础
- Java多线程系列(一)—多线程基础
- 学习系列一:多线程理解
- Java多线程系列(一)-----基本概念
- C# 多线程学习系列一:认识多线程
- ASP.Net教程系列:多线程编程实战(一)
- java多线程系列----------- 基本的线程机制(一)
- 初识汇编---Debug命令
- jQuery ready与window.onload的区别
- Relative Attributes
- 表单图片文字同时上传的解决方法
- 个人理解的Android设计模式之观察者模式
- 多线程系列(一)
- Excel使用总结
- jdk1.8.0_73源码解读——ArrayList的实现
- 启动 Hadoop 集群时datanode节点不启动原因之一——格式化次数太多的解决办法
- 一题多解(五) —— topK(数组中第 k 大/小的数)
- Hibernate4自学入门(一)——初识Hibernate
- 根据文本内容调整Button大小
- Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
- 267_Gallery使用