博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一、Java中的synchronized关键字
阅读量:6042 次
发布时间:2019-06-20

本文共 744 字,大约阅读时间需要 2 分钟。

理解:Java中的synchronized关键字.

指标:理解synchronized的含义、明确synchronized关键字修饰普通方法、 静态方法和代码块时锁对象的差异.

有如下一个类A

class A{        public synchronized  void a(){}        public synchronized  void b(){}    }复制代码

两个对象

A a1 = new A();

A a2 = new A();

Thread1     Thread2

a1.a();      a2.a();

问题一: 请问二者能否构成线程同步?

问题二: 如果A的定义是这样的呢?

class A{        public static synchronized  void a(){}        public static synchronized  void b(){}    }复制代码

synchronized 修饰对象为以下3种:

  1. 修饰普通方法 , 一个对象中加锁的方法只允许是一个线程访问的.这种情况锁的是访问该方法的实例对象,如果是多个线程不同的对象访问该方法,则无法保证同步.
  2. 修饰静态方法 , 静态方法是类方法,所以这种情况下锁的是包含这个方法的类,也就是类对象,这种情况下,多个线程的不同对象也是可以保证同步的
  3. 修饰代码块 , 如果是synchronized (obj),这个同步效果等同于修饰普通方法, 如果是synchronized (obj.class)同步效果等同于修饰静态方法.

问题1:不能同步

问题2:能同步

转载于:https://juejin.im/post/5b5f3670f265da0f990d6aed

你可能感兴趣的文章
我的友情链接
查看>>
MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
查看>>
c# 入门 例子
查看>>
HP Designjet 800PS 日常维护
查看>>
rhel7使用fdisk分区时无法使用全部分区的解决办法
查看>>
Docker 清理命令
查看>>
利用NRPE外部构件监控远程主机
查看>>
使用模块化编译缩小 apk 体积
查看>>
router-link传参
查看>>
ios之UISlider
查看>>
短信验证流程
查看>>
php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
查看>>
OpenCV Error: Assertion failed (data0.dims <= 2 && type == 5 && K > 0) in cv::kmeans
查看>>
python string 之 format
查看>>
树形DP 复习
查看>>
Vuex随笔
查看>>
crontab 不执行
查看>>
避免用for循环写数据
查看>>
Dijkstra(变形) POJ 1797 Heavy Transportation
查看>>
关于Webpack详述系列文章 (第三篇)
查看>>