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);

}

}

}

=>确保只使用一个锁来访问所有玩家,否则您的棋盘状态将不一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据对社交媒体的影响_数据如何影响媒体,广告和娱乐职业

大数据对社交媒体的影响In advance of our upcoming event — Data Science Salon: Applying AI and ML to Media, Advertising, and Entertainment, we asked our speakers, who are some of nation’s leading data scientists in the media, advertising, and entertainment…

Go-项目结构和代码组织

简介 做大量的输入,通过对比、借鉴,加上自己的经验,产出一个尽可能优的方案。 开源界优秀项目的结构示例 因为最新的 Go 版本已经使用 module 作为版本依赖,所以,所有项目的 vendor 我都忽略,建议直接使用 …

iref streams_如何利用Neo4j Streams并建立即时数据仓库

iref streamsby Andrea Santurbano通过安德里亚桑图尔巴诺(Andrea Santurbano) 如何利用Neo4j Streams并建立即时数据仓库 (How to leverage Neo4j Streams and build a just-in-time data warehouse) In this article, we’ll show how to create a Just-In-Time Data Wareho…

Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解

1. Match函数使用指定的正则表达式函数对字符串惊醒查找,并以数组形式返回符合要求的字符串原型:stringObj.match(regExp)参数:stringObj 必选项,需要去进行匹配的字符串RegExp 必选项,指定的正则表达式返回值&#xf…

Zabbix 3.0 从入门到精通(zabbix使用详解)

第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源 网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也称为可用性,英文描述为HA,High Avail…

python 装饰器装饰类_5分钟的Python装饰器指南

python 装饰器装饰类重点 (Top highlight)There’s no doubt that Python decorators are one of the more advanced and tougher-to-understand programming concepts. This doesn’t mean you should avoid learning them — as you encounter them in production code soone…

php中颜色的索引值,计算PHP中两种颜色之间的平均颜色,使用索引号作为参考值...

我们假设为了讨论的目的,每个颜色都有一个“值”.那么,你想要的就足够简单:$index 0.2;$val1 get_value_of_color($color1);$val2 get_value_of_color($color2);$newval $val1 * $index $val2 * (1 - $index);$newcolor get_color_from_value($newval);所以,很…

leetcode 989. 数组形式的整数加法

对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X 1231,那么其数组形式为 [1,2,3,1]。 给定非负整数 X 的数组形式 A,返回整数 XK 的数组形式。 示例 1: 输入:A […

您需要了解的WordPress漏洞以及如何修复它们

by Joel S. Syder乔尔赛德(Joel S.Syder) 您需要了解的WordPress漏洞以及如何修复它们 (WordPress vulnerabilities you need to know about — and how to fix them) WordPress is an incredibly useful and versatile platform for all kinds of blogging. It’s become ver…

Maven基础。

---恢复内容开始--- Maven: 1、概念。 * maven 是一个项目管理工具。 * maven的作用。 1、jar包。依赖管理。将jar包放在jar包仓库(pom.xml),不需要每个项目都添加jar包。 2、测试。 3、项目发布。 2、使用。 * 下载解压即可。 * 环境变量配置…

Dinosaur Run - Dinosaur world Games

转载于:https://www.cnblogs.com/hotmanapp/p/7092669.html

机器学习实际应用_机器学习的实际好处是什么?

机器学习实际应用Some of my previous introductory posts to machine learning and data science were a bit technical. However, my purpose of this post is to explain some of the practical use-cases of ML solely from a non-technical savvy layman’s perspective w…

Javascript的setTimeOut()和setInterval()的定时器用法

Javascript用来处理延时和定时任务的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请求获取最新数据等等。但它们的应用是有区别的。 setTimeout()…

php随机生成车牌号,生成汽车牌照

用户随机50选1。好的车牌用户选不到。我目前的做法是这样的。所有车牌入库。别人选了状态就修改为1。下面是入库程序,想跟大家讨论一下,有没有更好的方式。use Illuminate\Database\Seeder;class LicensePlatesTableSeeder extends Seeder{public functi…

Go_ go mod 命令解决墙的问题

简介 由于众所周知的原因,在下载一些库的时候会下载不了,比如 golang.org/x/... 相关的库。为此,网上出现了很多解决方案。 从 Go1.11 开始,Go 引入了 module,对包进行管理,通过 go mod 命令来进行相关操作…

leetcode 1319. 连通网络的操作次数(并查集)

用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] [a, b] 连接了计算机 a 和 b。 网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。 给你这个…

MySQL中choose标签的用法

先给大家来个SQL语句&#xff1a; choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中 的 choose 很类似。 <select id"getMemberInfo" resultType"java.util.Map" parameterType"java.util.Map" > SELECT …

php hsetnx,HSETNX命令_视频讲解_用法示例-redis编程词典-php中文网

set英 [set] 美 [sɛt]vt.设置;放置&#xff0c;安置;使处于某种状况;摆放餐具vi.落山;出发;凝结n.集合;一套&#xff0c;一副;布景;电视机adj.固定的;位于…的;顽固的;安排好的第三人称单数&#xff1a; sets 复数&#xff1a; sets 现在分词&#xff1a; setting 过去式&am…

用导函数的图像判断原函数的单调性

前言 典例剖析 例1(给定\(f(x)\)的图像&#xff0c;确定\(f(x)\)的单调性&#xff0c;最简单层次) 题目暂略。 例2(用图像确定\(f(x)\)的正负&#xff0c;确定\(f(x)\)的单调性&#xff0c;2017聊城模拟) 已知函数\(yxf(x)\)的图像如图所示(其中\(f(x)\)是函数\(f(x)\)的导函数…

朴素贝叶斯 半朴素贝叶斯_使用朴素贝叶斯和N-Gram的Twitter情绪分析

朴素贝叶斯 半朴素贝叶斯In this article, we’ll show you how to classify a tweet into either positive or negative, using two famous machine learning algorithms: Naive Bayes and N-Gram.在本文中&#xff0c;我们将向您展示如何使用两种著名的机器学习算法&#xff…