- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些数据(两个哈希集和一个即时时间戳),我希望对我的 JIRA(OpenSocial?)小工具/插件的所有请求进行共享 - 因为生成它需要很长时间(几分钟)并且因为共享将有助于提高请求的性能。
偶尔(很少),请求可能包含一个参数,指示应刷新此共享数据。当然,第一次需要它时,它就会被填充。数据代表一个陈旧的答案是可以的——它基于缓慢变化的事物,并用于可视化趋势,因此相差一的错误是可以容忍的。
我想象当 JIRA 启动(或者我上传附加组件的新版本)并且在前几分钟内收到多个请求时,我需要在线程中处理这些昂贵的共享数据的数量-安全的方式。目前结果看起来不错,但据我了解,这只是偶然。
只有一个线程需要完成填充工作。启动时,其他线程当然必须等待,因为它们不能空手跳过。 (如果所有线程都执行昂贵的初始化,则会给服务器带来大量不必要的负载)
但是在初始成本之后,如果多个并发请求进来并且其中一个包含“刷新”参数,则只有一个线程需要付出代价 - 我对使用旧副本的其他线程没问题昂贵的数据,从而保持性能,并在响应中包括“是的,有人正在刷新数据,但这是使用旧副本的结果”。
有关数据的更多信息:两个 HashSet 和时间戳旨在表示时间上一致的快照。 HashSet 内容仅取决于数据库中的值,时间戳只是最近刷新的时间。这些数据都不依赖于任何早期的快照。而且这也不取决于程序状态。时间戳仅用于粗略地回答“此数据有多久了”的问题。每次刷新数据时,我希望时间戳会更新,但如果错误也不会造成任何破坏。它只是为了调试和透明度。由于快照不依赖于早期快照或程序状态,因此可以将其包装并标记为 volatile 。
是否有一个明显的选择来解决这个问题的最佳方法?替代方案的优点和缺点?
最佳答案
您将需要使用锁来同步对代码中只需要一个线程同时执行的部分的访问。 SO 和 Oracle Java 文档中有大量资源展示了如何更详细地使用锁,但类似这样的东西应该可以解决问题。
这个想法是,您希望维护最近生成的结果集的副本,并且始终返回该副本,直到获得一组新的可用数据。
import java.util.concurrent.locks.ReentrantLock;
public class MyClass
{
private volatile MyObject completedResults;
private final ReentrantLock resultsLock;
private final ReentrantLock refreshLock;
public MyClass()
{
// This must be a singleton class (such as a servlet) for this to work, since every
// thread needs to be accessing the same lock.
resultsLock = new ReentrantLock();
refreshLock = new ReentrantLock();
}
public MyObject myMethodToRequestResults(boolean refresh)
{
MyObject resultsToReturn;
// Serialize access to get the most-recently completed set of results; if none exists,
// we need to generate it and all requesting threads need to wait.
resultsLock.lock();
try
{
if (completedResults == null)
{
completedResults = generateResults();
refresh = false; // we just generated it, so no point in redoing it below
}
resultsToReturn = completedResults;
}
finally
{
resultsLock.unlock();
}
if (refresh)
{
// If someone else is regenerating, we just return the old data and tell the caller that.
if (!refreshLock.tryLock())
{
// create a copy of the results to return, since we're about to modify it on the next line
// and we don't want to change the (shared) original!
resultsToReturn = new MyObject(resultsToReturn);
resultsToReturn.setSomeoneElseIsRegeneratingTheStuffRightNow(true);
}
else
{
try
{
completedResults = generateResults();
resultsToReturn = completedResults;
}
finally
{
refreshLock.unlock();
}
}
}
return resultsToReturn;
}
}
关于java - Jira:线程安全的小工具数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24194267/
如何在 jira 中查看用户每周完成/正在进行的任务? 提前致谢。 最佳答案 您的问题不是很清楚,完成/进行中 是什么意思?问题的状态?并说我如何查看您到底是什么意思?从吉拉看到他们?发送每周邮件?
我正在使用树莓派墙板在壁挂式屏幕上显示项目 jira 状态。为了使树莓派作为墙板工作,我遵循了 http://blogs.wcode.org/2013/09/howto-boot-your-raspb
当我将 jira 问题的状态更改为其他人应该处理它时,我是否应该更改 jira 问题中的受让人? 什么是常用方法? (请提供您想法的可靠来源) 最佳答案 这取决于您想要实现的目标。如果您使用 JIRA
我想知道我对用户故事的估计有多准确。 我在 Jira + Greenhopper 中记录了我的时间,并查看了时间 tracking reports但我不确定如何按个人用户过滤故事 最佳答案 我通过创建
很抱歉,如果SO不是最好的地方,但是我在JIRA中启用了时间跟踪功能,并且希望能够为给定日期范围内的每个用户生成时间报告。我唯一的时间跟踪报告选项非常有限,并且没有执行我想要的操作,是否可以通过标准功
我需要过滤在特定日期之后进入RTT状态的票证。这些票证将立即解决,但是我需要查看所有在日期后进入该票证的票证,无论其当前状态如何。 最佳答案 例如,查找在Open之后其状态从Closed变为2012/
在JIRA中,如何在所有项目中查找与用户相关的所有问题。 简单的查询搜索仅产生全文结果。即,仅在提及该名称的问题上,而不是在名称已分配,已报告,已抄送等情况下出现的问题。 我的目的是在这里查找与我相关
安装 Sonar JIRA plugin 后并重新启动 Sonar 服务器,我使用 Sonar Ant 任务中配置的以下属性运行分析: sonar.jira.url(未使用 HTTPS) sonar.
我错误地将问题从“未开始”移至“已完成”。有办法把问题移回来吗? 我宁愿让它“进行中”。 最佳答案 答案是肯定的,但您可能需要自定义工作流程以添加从“完成”状态到其他状态的转换。确保使用发布功能清除解
JIRA 在哪里保存与票证相关的附件?我只想备份 JIRA 站点上的屏幕截图图像和文档。它是否将其保存在 MySQL BLOB 列类型中? 最佳答案 根据JRA-23758 (现在是 JRA-1987
鉴于 JIRA 中的一个问题有多个评论,是否有一种简单的方法可以从一个评论链接到另一个评论? 我可以使用永久链接,但这是一个又长又难看的 URL。我还可以链接到例如http://jira.exampl
安装 Sonar JIRA plugin 后并重新启动 Sonar 服务器,我使用 Sonar Ant 任务中配置的以下属性运行分析: sonar.jira.url(未使用 HTTPS) sonar.
我有一个独立的 JIRA 实例在我的服务器上运行。我使用 atlas-mvn 命令构建了一个 jira 插件,这创建了一个 jar 文件。 通常的过程是登录到独立的 JIRA UI 并从 UPM 进行
有没有办法使用 python JIRA 库在 JIRA 中获取冲刺的开始和结束日期?我可以得到 jira.client.ResultList使用 jira.sprints(jira.boards()[
我们有一些学员,我们想给他们一些 JIRA 的介绍性任务。 我们使用的是 JIRA 4.4 版。 在 JIRA 中实现以下目标的最少侵入方式(如果可能,避免创建全局组或权限)是什么: 限制学员用户帐户
我是 JIRA 插件开发的新手,所以我的问题可能听起来太简单了,但请耐心等待并仔细阅读,因为我已经尝试了很多东西,在互联网上找到,但都没有奏效。这就是为什么我在这里问它,作为我最后的希望。 我想用 J
我已经为 Jira 7 开发了 Jira Server 附加组件/插件,现在需要将其安装到 Jira 的云实例中。但是在我的插件的市场页面上它说: This hosting is not availa
我使用这个请求创建了一个 Jira 搜索过滤器: POST /rest/api/2/filter 这工作得很好。现在在我创建过滤器后,我想自动订阅它。 有没有办法用 REST API 做到这一点?或者
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
要求人们给我分配 jira 任务以实现一些问题或修复错误,当我完成任务后,我将任务分配给一些测试人员。 现在我想知道在当前项目/版本中分配给我的任务是检查文档。任何想法如何做到这一点? jira 中的
我是一名优秀的程序员,十分优秀!