English 中文(简体)
Java:什么时候来yn美方法和区块
原标题:Java: when to syncrhonize methods and blocks

我的理解是,<代码>同步化 关键词同时用于防止多个近层接触相同的密码(无论是整个方法,还是某种方法中混合代码的一部分),这有助于防止出现新事物,如僵局。

在<><>时,我 st什么? 我认为,唯一可以认为的是,发生事件的次序至关重要,但即便如此,我也无法想象一个实际、具体和真实的世界。

我从来没有写过同步的方法或框架,因此,“通过树木看见森林”对我来说是困难的。 任何背景例子都受到高度赞赏。 提前感谢。

最佳回答

使用<条码> 当两条或两条以上线人需要修改同一资源时,你想要强制执行的是,在任何特定时间,只有一人能够获得资源。 例如,如果你有一套变量,应当一起加以修改。

The following s a example from the Java tutorial:

整个章节很有启发性:

问题回答

当根据同一套数据进行多种校对时,如果你想要哪一种校对,则在第二版开始就数据采取行动之前,其他校对可见。

您希望使用同步关键词。

(a) 如果你只想在时间(中)由一对read操作数据

b) 如果您想到以前所做的一切变化,在它出现时,就会看到另一个方面。

c) 如果你想要由胎面做整整整整项手术(即完全完成而不是在中间离开)的话。

You can use synchronized methods or block to resolve all these above conditions.

现实世界的主要使用案例与客户生产者模式一样——如一线校正数据,另一套校对数据进行验证和更新,另一套线索则维持数据。

我认为,这在记忆数据库和实时操作中非常有用,因为在实时操作中,摩擦至关重要。

同步使用:从来不是。 历史表明,在非属地申请中实现这一权利几乎是不可能的,因此,图书馆和语文的普及程度提高,这些图书馆和语言为一致性提供了替代解决办法:行动者框架、软件交易记忆等等。

生产者-消费者是一种典型的环境,如果需要正确的结果,就非常需要同步。 生产者是法典的组成部分( Java的一个类别),生产一些单位,消费者是消费这些生产单位的另一个组成部分。 生产者和消费者必须相互独立,但必须产生有意义的行为。

总的来说,在多处,物体的某些状态是独立的,但只有在协调的情况下,才会产生有意义的结果——你们需要使用<条码>同步化<>条码>。

虽然大多数讨论侧重于同步,但我认为,它们确实讨论了分歧。 因此,请看障碍和方法的同步程度如何。

public synchronized method( Param param ) {
   // do some work in here
}

public method( Param param ) {
    synchronized( this ) {
        // do some work here
    }
}

这两个方法完全相同。 通知中没有任何法律高于或低于同步部分。 如果它们是集团之外的一些法典,则该法典将由多面实施。 两者的另一个区别是,你可以改变不设锁的守则和正在锁定的守则。 如果只有一小部分人需要锁定,而且如果该方法的肉类是热点,则该方法可操作多面的提高性能。 现在,请看各区如何能够提供比方法更令人满意的同步。

public synchronized method1( Param param ) {
    // do something unrelated to method 2
}

public synchronized method2( Param param ) {
   // do something unrelated to method 1
}

在这种情况下,方法1和办法2只允许在这两种方法中一劳永逸地进行阅读,因为同步方法在时间上lock。 当然,如果我们在一个整体上同步,那将是一样的。 然而,我们并不一定要始终保持同步。 这是一种使方法1和方法2独立的方式。

Object method1Lock = new Object();
Object method2Lock = new Object();

public method1( Param param ) {
   synchronized( method1Lock ) {
      // do stuff
   }
}

public method2( Param param ) {
   synchronized( method2Lock ) {
      // do stuff
   }
}

这是一种重要的区别,因为现在的方法1和方法2在无法使用同步方法的情况下可以同时实施。 你们必须牢记,方法1和方法2是独立的。 如果方法1 修改了案例变量,方法2 则表明变量是独立的,而且你必须使用方法同步。 然而,如果方法1能够使用不同于方法2的单独实例变量,那么这种技术就可以使用。 所有这一切意味着什么? 这两种技术都优于另一种技术。 方法的同步是简单和直截了当的,但可能表现较差,因为它太锁了。 阻碍同步解决了这一问题,但它更为复杂。

协同效应很重要。 这些问题无法解决。 然而,最好谨慎,在你不需要时努力避免使用。 有一些巨大的技术可以消除锁定,并可提高产出,以便你知道何时使用这些技术。 所有这一切都是吸取经验和智慧的。 Good luck.

Use synchronize methods if:

(a) you want to add the complete code of the method as thread-safe (in plain simple terms this code going to be executed by one thread max at a time)
(b) You dont want to use different lock for different method. Adding synchronization to non-static method takes the instance-object lock. While adding the synchronized to multiple methods, all will have same lock, which means any code of all synchronized method is going to be executed by one thread max at a time

Use synchronize block if:

(a) you only want a portion of code inside method to be thread-safe.
(b) You want flexibility to choose your own lock (every object contains monitor lock).

法典的所有部分都处于一个同步的锁下(不管用什么方法或阻挡),只能靠 go子执行。 否则,其他人员将停下来,等待监测锁。

我在这里的博客中展示了使用同步装置的美丽方式:

http://singletonjava.blogspot.com





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签