java 同步块的锁是什么,java – 同步块 – 锁定多个对象
我添加了另一个答案,因为我还没有添加评论给其他人的帖子。
>事实上,同步是用于代码,而不是对象或数据。在同步块中用作参数的对象引用表示锁定。
所以如果你有如下代码:
class Player {
// Same instance shared for all players... Don't show how we get it now.
// Use one dimensional board to simplify, doesn't matter here.
private List[] fields = Board.getBoard();
// Current position
private int x;
public synchronized int getX() {
return x;
}
public void setX(int x) {
synchronized(this) { // Same as synchronized method
fields[x].remove(this);
this.x = x;
field[y].add(this);
}
}
}
然后尽管在同步块上存在,但对字段的访问不受保护,因为锁不一样(它在不同的实例上)。因此,您的主板的播放器列表可能会变得不一致,并导致运行时异常。
相反,如果你写下面的代码,它将工作,因为我们只有一个共享锁为所有玩家:
class Player {
// Same instance shared for all players... Don't show how we get it now.
// Use one dimensional board to simplify, doesn't matter here.
private List[] fields;
// Current position
private int x;
private static Object sharedLock = new Object(); // Any object's instance can be used as a lock.
public int getX() {
synchronized(sharedLock) {
return x;
}
}
public void setX(int x) {
synchronized(sharedLock) {
// Because of using a single shared lock,
// several players can't access fields at the same time
// and so can't create inconsistencies on fields.
fields[x].remove(this);
this.x = x;
field[y].add(this);
}
}
}
=>确保只使用一个锁来访问所有玩家,否则您的棋盘状态将不一致。
java 同步块的锁是什么,java – 同步块 – 锁定多个对象相关推荐
- java runnable线程锁_多线程 java 同步 、锁 、 synchronized 、 Thread 、 Runnable
线程 1 线程概述 1.1 什么是线程 v 线程是程序执行的一条路径, 一个进程中可以包含多条线程 v 一个应用程序可以理解成就是一个进程 v 多线程并发执行可以提高程序的效率, 可以同时完成多 ...
- java同步锁实例_Java lock同步锁使用实例解析
这篇文章主要介绍了Java lock同步锁使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1)Lock是一个接口,而synchroniz ...
- java同步锁售票_线程同步锁之火车站售票案例
前言: 谈到多线程,就不得不说线程同步,那么什么是线程同步? 线程同步 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作 ...
- java 同步解决不安全类_「JAVA」Java 线程不安全分析,同步锁和Lock机制,哪个解决方案更好...
线程不安全 线程不安全的问题分析:在小朋友抢气球的案例中模拟网络延迟来将问题暴露出来:示例代码如下: public class ImplementsDemo { public static void ...
- Java多线程之线程同步机制(锁,线程池等等)
Java多线程之线程同步机制 一.概念 1.并发 2.起因 3.缺点 二.三大不安全案例 1.样例一(模拟买票场景) 2.样例二(模拟取钱场景) 3.样例三(模拟集合) 三.同步方法及同步块 1.同步 ...
- 使用线程锁(lock)实现线程同步_一文搞懂Java多线程使用方式、实现原理以及常见面试题...
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- java多线程学习二、安全与不安全示例:12306买票和银行取钱、java内存模型、内存可见性、线程同步块和方法
文章目录 前言 1. 什么是块,分为几种 2. 静态块与构造块的区别 一. 举例说明:并发情况下,线程不安全 1. 示例1:unsafe12306取票 2. 示例2:unsafe银行取钱 二.线程不安 ...
- Java:多线程(同步死锁、锁原子变量、线程通信、线程池)
5,同步和死锁 5.1,线程同步 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象: 修饰一个方法,被修饰的方法称为同步方法,其作用 ...
- java同步锁如何使用_java 同步锁(synchronized)的正确使用姿势
关于线程安全,线程锁我们经常会用到,但你的使用姿势正确不,反正我用错了好长一段时间而不自知.所以有了这篇博客总结下线程锁的正确打开姿势 废话不说看例子 一,对整个方法进行加锁 1,对整个方法进行加锁, ...
最新文章
- 广东汕尾2021年高考成绩查询,广东汕尾2021年高考英语听说考试成绩查询入口
- 1005 矩阵快速幂
- Safari tabindex 不工作的问题 (误
- 批处理解决局域网共享打印机问题
- linux系统下PHP无法调用oracle数据库的解决方法
- python可以怎么玩_这波太炸了!Python脚本可视化居然可以这么玩!
- 浅说position定位及z-index使用
- erase() 返回的是删除此元素之后的下一个元素的迭代器 .xml
- java连接redis不稳定_java相关:jedispool连redis高并发卡死的问题
- [Flink]Flink DataStream window join 和interval join
- 经典排序算法(十八)--Proxmap Sort
- hadoop2.2完全分布式最新高可靠安装文档
- c++ const 修饰变量位置含义
- CoinCola研究院 | 从技术的角度解读BCH分叉升级
- FTP服务器的搭建,可两个电脑通过局域网进行传输
- RK3399 上电待机,按power按键开机
- 异度之刃2 任务打杂店的帮手去哪获取纯洁石
- c语言编程小球运行结果是,如何用C语言编程一个滚动的小球 最好是五彩的 滚动的...
- 山东航天九通车联网:大数据技术引领为智慧物流赋能
- 一款网易云音乐歌词制作软件