我只是意识到我需要在一个方面同步大量的数据收集代码,但是性能才是真正的问题。如果性能下降太多,我的工具将被丢弃。我将分别将int和long写入各种数组,ArrayList和Map。应用程序将有多个线程将进行功能调用,这将由我的方面进行介绍。我应该注意什么样的事情会对性能产生负面影响?哪种代码模式更有效?
特别是我有一种方法可以调用许多其他数据记录方法:
void foo() {
bar();
woz();
...
}
这些方法通常会添加纵横比字段的增量
void bar() {
f++; // f is a field of the aspect
for (int i = 0; i < ary.length; i++) {
// get some values from aspect point cut
if (some condiction) {
ary[i] += someValue; // ary a field of the aspect
}
}
}
我应该分别同步foo,bar,woz和其他人,还是应该将bar,woz等中的所有代码移到foo中并进行同步?我应该this
在专门创建的同步对象上在上进行同步:
private final Object syncObject = new Object();
(请参阅这篇文章),或关于方法中的个别数据元素:
ArrayList<Integer> a = new ArrayList<Integer>();
void bar() {
synchronize(a) {
// synchronized code
}
}
并发非常棘手。容易出错,很难正确。在这一点上,我不会太担心性能。我首先要考虑的是使并发代码安全运行(没有死锁或竞争条件)。
但是关于性能的问题:如有疑问,请简介。很难说不同的同步方案将如何影响性能。我们很难为您提供建议。我们需要查看更多代码,并对应用程序的工作有更深入的了解,才能为您提供真正有用的答案。相比之下,剖析为您提供了确凿的证据,证明一种方法是否比另一种方法慢。它甚至可以帮助您确定减速的位置。
如今,有许多很棒的Java分析工具。Netbeans和Eclipse分析器很好。
另外,我建议完全远离原始同步。尝试使用java.util.concurrency
包中的某些类。它们使编写并发代码变得更加容易,并且出错的可能性也大大降低。
另外,我建议您阅读Brian Goetz等人的《Java Concurrency in
Practice
》。它写得很好,涵盖了很多基础。
经过以下问题后,同步块能比原子更快吗<我编写了一个简单的程序来比较AtomicInteger和synchronized块(其中int递增)的性能差异。每次我运行这个程序,它都会给我一个比率 当我使用 该比率最小。它在100左右变化 比率约为800。 问题1:你能告诉我这是测试AtomicInteger和synchronized increment()方法性能差异的正确方法吗? 问题2:如果我增加T
请看下面给我带来麻烦的方法: 然后是run方法:
本文向大家介绍java synchronized同步静态方法和同步非静态方法的异同,包括了java synchronized同步静态方法和同步非静态方法的异同的使用技巧和注意事项,需要的朋友参考一下 java synchronized 详解 synchronized关键字有两种用法,一种是只用于方法的定义中,另外一种是synchronized块,我们不仅可以使用synchronized来同步一个对
问题内容: Java中的同步方法和同步块有什么区别? 我一直在网上搜索答案,人们似乎对此不太确定:-( 我的看法是,两者之间没有区别,只是synch块的作用域可能更多,因此锁定的时间更少了? 如果在静态方法上使用Lock,则采用什么Lock?班级锁是什么意思? 问题答案: 同步方法将方法接收器用作锁(即,用于非静态方法,而用于静态方法的封闭类)。 blocks将表达式用作锁。 因此,以下两种方法等
我试图更好地理解Java多线程。所以,我知道这句话说只有一个线程可以访问一个对象实例,从而调用该实例的方法(例如,在这种情况下,类 中的减方法。 但是,当你仍然有相同的 会发生什么,但两个线程与不同的 相关联,完全试图调用 的方法?我以为不的消息永远不会被打印出来,但它确实打印出来了。毕竟,仍然只有一个对象实例 ,这是否意味着同步不适用于此示例?
我在Java写程序,有点担心同步。 这个场景非常“简单”,我们有一个简单的银行账户类,多人可以从账户中取款(虽然他们不能存款),他们也可以检查账户余额。问题是,余额一直在变化,因此我们希望客户查看正确的余额! 到目前为止,这是我的班级。 正如您可以看到的,通过这个实现,我可以确保有人可以从一个account对象获得资金,但是这个account对象被阻止了,然后一个解决方案出现了 添加这似乎解决了我