Java 类对象上的同步
当我阅读以下示例时,我正在阅读关于concurreny的教程: 下面是与静态方法相同的两个示例。这些方法在方法所属类的类对象上同步: 只有一个线程可以同时在这两个方法中的任何一个内执行 第二个已同步的块是否已在其他服务器上同步 对象,则每个线程内部可以执行一个线程 方法 我只是想确保我做对了 所以你不能在一个线程中同时调用log1和log2方法?但是如果类对象上没有同步,你可以吗 我想困扰我的更多是翻译Java 类对象上的同步,java,multithreading,concurrency,Java,Multithreading,Concurrency,当我阅读以下示例时,我正在阅读关于concurreny的教程: 下面是与静态方法相同的两个示例。这些方法在方法所属类的类对象上同步: 只有一个线程可以同时在这两个方法中的任何一个内执行 第二个已同步的块是否已在其他服务器上同步 对象,则每个线程内部可以执行一个线程 方法 我只是想确保我做对了 所以你不能在一个线程中同时调用log1和log2方法?但是如果类对象上没有同步,你可以吗 我想困扰我的更多是翻译 请举一个带有注释的示例。否。这两个方法都在MyClass.class上同步。因此,如果一个线
请举一个带有注释的示例。否。这两个方法都在MyClass.class上同步。因此,如果一个线程调用任何一个方法,另一个线程就不能同时调用这两个方法中的任何一个
如果一个方法在另一个对象上同步,那么这两个方法不再互斥,一个线程可以调用log2,而另一个线程可以调用log1。否。这两个方法都在MyClass.class上同步。因此,如果一个线程调用任何一个方法,另一个线程就不能同时调用这两个方法中的任何一个
如果一个方法在另一个对象上同步,那么这两个方法不再互斥,一个线程可以调用log2,而另一个线程可以调用log1。否。这两个方法都在MyClass.class上同步。因此,如果一个线程调用任何一个方法,另一个线程就不能同时调用这两个方法中的任何一个
如果一个方法在另一个对象上同步,那么这两个方法不再互斥,一个线程可以调用log2,而另一个线程可以调用log1。否。这两个方法都在MyClass.class上同步。因此,如果一个线程调用任何一个方法,另一个线程就不能同时调用这两个方法中的任何一个 如果一个方法在另一个对象上同步,那么这两个方法不再互斥,一个线程可以调用log2,而另一个线程可以调用log1 所以你不能在一个线程中同时调用log1和log2方法?但是如果类对象上没有同步,你可以吗 确切地说,您不能同时在不同的线程中调用方法log1和log2。声明方法
静态同步
与在类对象上同步具有相同的效果
下面是一个示例,其中第二个方法在log
变量而不是类上进行同步
public class MyClass {
public static synchronized void log1(String msg1, String msg2){
log.writeln(msg1);
log.writeln(msg2);
}
public static void log2(String msg1, String msg2){
synchronized(log){
log.writeln(msg1);
log.writeln(msg2);
}
}
}
在这种情况下,两个单独的线程可以同时执行log1
和log2
,因为它们在不同的对象上同步:MyClass.class
对象上的log1
,以及log
对象上的log2
(无论定义在哪里)
以下是有关同步方法和块的关键事项:
静态同步
与在类对象上同步具有相同的效果
下面是一个示例,其中第二个方法在log
变量而不是类上进行同步
public class MyClass {
public static synchronized void log1(String msg1, String msg2){
log.writeln(msg1);
log.writeln(msg2);
}
public static void log2(String msg1, String msg2){
synchronized(log){
log.writeln(msg1);
log.writeln(msg2);
}
}
}
在这种情况下,两个单独的线程可以同时执行log1
和log2
,因为它们在不同的对象上同步:MyClass.class
对象上的log1
,以及log
对象上的log2
(无论定义在哪里)
以下是有关同步方法和块的关键事项:
静态同步
与在类对象上同步具有相同的效果
下面是一个示例,其中第二个方法在log
变量而不是类上进行同步
public class MyClass {
public static synchronized void log1(String msg1, String msg2){
log.writeln(msg1);
log.writeln(msg2);
}
public static void log2(String msg1, String msg2){
synchronized(log){
log.writeln(msg1);
log.writeln(msg2);
}
}
}
在这种情况下,两个单独的线程可以同时执行log1
和log2
,因为它们在不同的对象上同步:MyClass.class
对象上的log1
,以及log
对象上的log2
(无论定义在哪里)
以下是有关同步方法和块的关键事项:
静态同步
与在类对象上同步具有相同的效果
下面是第二个方法在log
变量instea上同步的示例