草庐IT

Synchronized

全部标签

java - 有什么理由不到处打 'synchronized' 关键字?

在我的java项目中,我编写的几乎所有非静态方法都是同步的。今天我决定通过删除大部分synchronized关键字来修复一些代码。就在那里,我创建了几个线程问题,花了很长时间才修复,但性能没有提高。最后我恢复了一切。我没看到其他人到处都用“synchronized”编写代码。那么我有什么理由不应该让“同步”无处不在?如果我不太关心性能(即该方法每隔几秒调用一次)怎么办? 最佳答案 如果不加选择地进行同步,还会冒创建deadlock的风险.假设我有两个类,Foo和Bar,它们都有一个同步方法doSomething()。进一步假设每个类

c# - Java 的 "synchronized"和 C 的 #'s "锁有区别吗?

这两个关键字是否具有完全相同的效果,或者我应该注意什么? 最佳答案 根据本网站:http://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_CSharp_lock_and_Java_synchronized,C#lock和Javasynchronized代码块是“语义相同的”,而对于方法,Java使用synchronized而C#使用属性:[MethodImpl(MethodImplOptions.Synchronized)]。

java - 不使用 `synchronized` 关键字的线程安全代码?

在不使用synchronized关键字的情况下,有哪些可能的方法可以使代码线程安全? 最佳答案 其实有很多方法:如果您没有可变状态,则根本不需要同步。如果可变状态仅限于单个线程,则无需同步。这可以通过使用局部变量或java.lang.ThreadLocal来完成。.您还可以使用内置的同步器。java.util.concurrent.locks.ReentrantLock与您在使用synchronizedblock和方法时访问的锁具有相同的功能,而且功能更强大。 关于java-不使用`sy

java - 如何跨类使用同步块(synchronized block)?

我想知道如何跨类使用同步块(synchronizedblock)。我的意思是,我想在多个类中使用同步块(synchronizedblock),但它们都在同一个对象上同步。我想到如何做到这一点的唯一方法是这样的://class1publicstaticObjectobj=newObject();someMethod(){synchronized(obj){//code}}//class2someMethod(){synchronized(firstClass.obj){//code}}在此示例中,我创建了一个任意对象以在第一个类中进行同步,并且在第二个类中也通过静态引用对其进行同步。但是

Java volatile 修饰符和同步块(synchronized block)

由多个线程访问但仅在同步块(synchronizedblock)内的变量是否需要volatile修饰符?如果不是,为什么? 最佳答案 您不需要在synchronized中使用volatile,synchronized已经保证在一致使用时(每次访问时)本地变量缓存的正确行为。volatile适用于原始值,并且可以成为对原始类型进行原子访问的一个很好的快捷方式。请注意,从1.4开始,JDK5中volatile的行为发生了变化。可以找到更多信息here 关于Javavolatile修饰符和同步

java - synchronized 在 Java 中是如何工作的

首先,here'sasample:publicclassDeadlock{staticclassFriend{privatefinalStringname;publicFriend(Stringname){this.name=name;}publicStringgetName(){returnthis.name;}publicsynchronizedvoidbow(Friendbower){System.out.format("%s:%shasbowedtome!%n",this.name,bower.getName());bower.bowBack(this);}publicsync

Java 语法 : "synchronized (this)"

你能给我解释一下这段java代码吗?我无法理解这种语法。synchronized(this){try{wait(endTime-System.currentTimeMillis());}catch(Exceptione){}} 最佳答案 这意味着这个代码块是同步的,意味着只有一个线程能够访问该block中的代码。此外,this意味着您可以在当前实例上进行同步(获取当前实例上的锁)。这是我在KathySierra的java认证书中找到的。因为同步确实会伤害并发,你不想同步任何超过保护数据所需的代码。所以如果一个方法的范围是超出需要,您

java - 将参数传递给同步块(synchronized block)的目的是什么?

我知道Whenyousynchronizeablockofcode,youspecifywhichobject'slockyouwanttouseasthelock,soyoucould,forexample,usesomethird-partyobjectasthelockforthispieceofcode.Thatgivesyoutheabilitytohavemorethanonelockforcodesynchronizationwithinasingleobject.但是,我不明白将参数传递给block的必要性。因为我是否将String的实例、一些随机类的实例传递给同步块(

objective-c - @synchronized 与 NSLock 实例与 pthread_mutex_t

我正在观看一个(2年前的)关于多线程的教程视频,其中指出NSLock实例比使用@synchronized快3倍pthread_mutex_t比NSLock实例快2倍(实际上比@synchronized快6倍)这是真的吗?我还没有找到任何有权威的说法,但我只是想在StackOverflow上对你们中的一些人进行投票,征求你们的意见,也许还有确凿的证据。谢谢!虽然我已经接受了正确答案,但此问题的future浏览者会发现这篇文章很有帮助:http://perpendiculo.us/?p=133 最佳答案 重要的是要记住@synchron

objective-c - 在类函数中使用@synchronized(self) { ... }

我不小心在类方法中使用了带有信号量self的@synchronizedblock。+(void)someFunction{@synchronized(self){/*somecode*/}}这似乎是有效的代码,至少编译器没有给我任何不好的反馈。我的问题是:这里的self是什么?据我所知,@synchronizedblock没有工作,但它也没有崩溃。我只是出于好奇才问的。 最佳答案 self在这个实例中指的是类,而不是实例。在ObjC中,类本身就是对象。 关于objective-c-在类函