Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同步是否影响对象成员?_Java_Multithreading_Thread Safety_Synchronized - Fatal编程技术网

Java 同步是否影响对象成员?

Java 同步是否影响对象成员?,java,multithreading,thread-safety,synchronized,Java,Multithreading,Thread Safety,Synchronized,如果我调用一个同步对象,我可以像同步对象一样访问该对象中的对象吗?或者我只能访问数据类型吗?可能,但必须小心。如果始终锁定同一对象,则可以执行此操作 很可能您必须锁定每个对象。可能,但必须小心。如果始终锁定同一对象,则可以执行此操作 很可能您必须锁定每个对象。即使您的目标是保护数据,同步也提供了围绕一块代码而不是一段数据的独占性。同步块外部(或使用不同对象的块中)的代码可能会更改您试图保护的数据,即使这不是您想要的 任何正确的锁定策略都必须确保可能相互干扰的代码块持有相同的锁。这包括可能干扰在第

如果我调用一个同步对象,我可以像同步对象一样访问该对象中的对象吗?或者我只能访问数据类型吗?

可能,但必须小心。如果始终锁定同一对象,则可以执行此操作


很可能您必须锁定每个对象。

可能,但必须小心。如果始终锁定同一对象,则可以执行此操作


很可能您必须锁定每个对象。

即使您的目标是保护数据,同步也提供了围绕一块代码而不是一段数据的独占性。同步块外部(或使用不同对象的块中)的代码可能会更改您试图保护的数据,即使这不是您想要的

任何正确的锁定策略都必须确保可能相互干扰的代码块持有相同的锁。这包括可能干扰在第二个线程中运行的自身的另一个副本的代码

synchronized (myObject) {
  // sensitive code
}

方法级别的锁定只是锁定方法主体的
这个
指针的简写。(或静态方法的
对象)。

即使您的目标是保护数据,同步也提供了围绕代码块而不是数据块的独占性。同步块外部(或使用不同对象的块中)的代码可能会更改您试图保护的数据,即使这不是您想要的

任何正确的锁定策略都必须确保可能相互干扰的代码块持有相同的锁。这包括可能干扰在第二个线程中运行的自身的另一个副本的代码

synchronized (myObject) {
  // sensitive code
}

方法级别的锁定只是锁定方法主体的
这个
指针的简写。(或静态方法的
对象)。

在每个对象上同步
的能力在Java中是一个常见的麻烦,因为它令人困惑

基本上,它意味着每个对象都可以是锁。就这样。因此,当您锁定父对象时,对象的成员不会受到特殊影响,并且使用哪个特定对象作为锁并不重要。如果所有线程都锁定在同一个对象上,则其中只有一个线程将运行/访问同步块中的任何代码。如果他们中的一些人不这样做,就没有这样的保证


如果要确保在任何给定时间只有一个线程访问某个成员,请确保访问该成员的所有线程在访问同一对象之前锁定(或“同步”)。只要这样做,使用哪个对象进行锁定就无关紧要。

在每个对象上进行
同步的能力在Java中是一个常见的麻烦,因为它很混乱

基本上,它意味着每个对象都可以是锁。就这样。因此,当您锁定父对象时,对象的成员不会受到特殊影响,并且使用哪个特定对象作为锁并不重要。如果所有线程都锁定在同一个对象上,则其中只有一个线程将运行/访问同步块中的任何代码。如果他们中的一些人不这样做,就没有这样的保证


如果要确保在任何给定时间只有一个线程访问某个成员,请确保访问该成员的所有线程在访问同一对象之前锁定(或“同步”)。只要您这样做,您使用哪个对象作为锁并不重要。

您的问题非常模糊-您所说的“调用对象同步”是什么意思?如果你能给出一个具体的代码示例,那会很有帮助。你的问题很模糊——你说的“调用对象同步”是什么意思?如果您能给出一个具体的代码示例,这将非常有帮助。