Synchronized的使用和注意事项
synchronized:
1、取得的锁都是对象锁,而不是把一段代码或方法(函数)当作锁;
2、多个线程访问的必须是同一个对象。
3、当一个线程执行的代码出现异常时,其所持有的锁会自动释放
4、A线程持有Object对象的Lock锁,B线程可以以异步方式调用Object对象中的非synchronized类型的方法
5、A线程持有Object对象的Lock锁,B线程如果在这时调用Object对象中的synchronized类型的方法则需要等待,也就是同步
6、当一个线程得到一个对象锁后,再次请求此对象锁时时可以再次得到该对象的锁的;
代码块:
1、A线程访问对象的synchronize代码块时,B线程依然可以访问对象的非synchronize代码块;
2、A线程访问对象的synchronize代码块时,B线程依然可以访问对象的synchronize代码块将会被阻塞;
3、线程A访问对象调用synchronize代码块时,线程B访问对象的synchronize方法时,将获取线程A的对象锁;
4、"任意对象"作为对象监视器来实现同步的功能。这个"任意对象"大多数是实例变量及方法的参数,全局实例变量,synchronized(非this),
不用阻塞每一个代码块,有效提高效率。
静态同步方法是类锁,非静态同步方法时对象锁,独立执行。
1、局部变量每调用一次方法其值都在当前线程的当前栈中临时分配;
2、也就是说对程序,同一时刻,只可能有一块栈内存被当前方法使用,用完了就回收了;
3、所以多线程并发访问一个只用到局部变量的方法是不用考虑并发安全性的。
- synchronized (object)与synchronized (this)一样,获取实例对象的锁.
- 因为synchronized (this)只能获取当前实例锁,那么synchronized (object)就是可以获取其他实例锁的意思
- 对于synchronized 最简单粗暴的理解就是,你要哪些线程方法同步,就跟他们获取一样的锁好了,A.class,就获取A.class,
- objectA 就获取 objectA(我说的不是对象名相同,而是真真切切在java堆中的同一个对象),
synchronized与static synchronized 的区别
synchronized是对类的当前实例(当前对象)进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块
static synchronized恰好就是要控制类的所有实例的并发访问
Synchronized的使用和注意事项的更多相关文章
- synchronized的使用及注意事项
主要来源:http://blog.csdn.net/luoweifu/article/details/46613015 1.synchronized(this) void method(){ sync ...
- 【java学习笔记】线程
1.线程的定义 ①继承Thread类,将执行的任务逻辑放到run方法中,调用start方法来开启线程 public class ThreadDemo { public static void main ...
- javaSE复习之——线程
线程其实就是程序执行的一条路径,一个进程中可以包含多条线程,多线程并发执行可以提高程序效率,可以同使完成多项任务 多线程的应用场景 迅雷多线程一起下载 服务器同时处理多个客户请求 多线程原理(单核CP ...
- java架构《并发线程基础一》
1.实现线程常见的两种的方式 : 1:继承extends Thread 2:实现new Runnable 实现其run方法 2.线程安全 结论: 当多个线程访问某一个类(对象或方法)时,这个对象 ...
- volatile、Synchronized实现变量可见性的原理,volatile使用注意事项
变量不可见的两个原因 Java每个线程工作都有一个工作空间,需要的变量都是从主存中加载进来的.Java内存模型如下(JMM): 线程访问一个共享的变量时,都需要先从主存中加载一个副本到自己的工作内存中 ...
- iOS多线程之2.NSThread的加锁@synchronized
我在上一篇文章讲了线程的生命周期,这篇文章来讲讲线程加锁的注意事项与@synchronized关键字. 那什么时候需要加锁呢,就是当多条线程同时操作一个变量时,就需要加锁了.至于为什么要加锁,可以 ...
- java单例模式使用及注意事项
1. 说明 1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例 2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstan ...
- 计算机程序的思维逻辑 (66) - 理解synchronized
上节我们提到了多线程共享内存的两个问题,一个是竞态条件,另一个是内存可见性,我们提到,解决这两个问题的一个方案是使用synchronized关键字,本节就来讨论这个关键字. 用法 synchroniz ...
- synchronized Lock用法
在介绍Lock与synchronized时,先介绍下Lock: public interface Lock { void lock(); void lockInterruptibly() throws ...
随机推荐
- Quoit Design(hdu 1007)
题意:给n个点的坐标,求距离最近的一对点之间距离的一半.第一行是一个数n表示有n个点,接下来n行是n个点的x坐标和y坐标.实数. /* 最小点距离问题 采用分治算法,假设对于1-n的区间,我们已经求出 ...
- 【NOIP模拟】数字对(RMQ,二分)
题意:小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= n). 这个特 ...
- 数据库备份与还原c#.net实现
原文发布时间为:2008-10-25 -- 来源于本人的百度文章 [由搬家工具导入] 数据库备份与还原c#.net实现: 页面上面有 备份,还原,下拉菜单(浏览备份文件夹下面的所有文件名),删除(删除 ...
- Linux审计sudo
Linux日志审计项目案例实战(生产环境日志审计项目解决方案) https://www.linuxidc.com/Linux/2015-07/120501.htm
- java HashMap的使用
java HashMap的使用 import java.util.HashMap; import java.util.Iterator; public class WpsklHashMap { pub ...
- [Bzoj4570][Scoi2016]妖怪(右上凸包)
4570: [Scoi2016]妖怪 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1110 Solved: 336[Submit][Status][ ...
- zookeeper的集群部署
1.上传安装包到集群服务器 2.解压 3.修改配置文件 进入zookeeper的安装目录的conf目录 cp zoo_sample.cfg zoo.cfg vi zoo.cfg # The numbe ...
- JVM原理及内存溢出
JVM原理及内存溢出
- 负载均衡之基于DNS负载
基于DNS的负载平衡 OK,在了解了负载平衡系统的大致组成及使用方式之后.我们就来看看各种负载解决方式. 当前业界中所最常使用的负载平衡解决方式主要分为三种:基于DNS的负载平衡,L3/4负载平衡,也 ...
- COCOS2DX学习之Box2d物理引擎使用之------动态物体的创建
1.创建一个物理世界 首先要引入一个头文件#include "Box2D\Box2D.h" 之后利用b2word创建一个对象,而且指定这个物理世界中的加速度方向. word = n ...