当不同的线程访问一个静态方法时,该方法中声明的对象是本地的还是在java中共享的
当不同的线程访问一个静态方法时,该方法中声明的对象是本地的还是在java中的线程之间共享的当不同的线程访问一个静态方法时,该方法中声明的对象是本地的还是在java中共享的,java,concurrency,Java,Concurrency,当不同的线程访问一个静态方法时,该方法中声明的对象是本地的还是在java中的线程之间共享的 另外,在执行i/o的线程上调用thread.interrupt()是否安全?静态方法中声明的对象不会在线程之间共享。在方法之外定义为静态的对象是共享的 因此: 如果要在执行I/O的线程上调用interrupt(),则应该考虑使用实现的类。静态方法中声明的变量不会在线程之间共享。当静态方法不修改任何静态或其他共享对象时,它是线程安全的——这意味着多个线程可以调用该方法,不会发生任何不好的情况 ,当中断一个线
另外,在执行i/o的线程上调用
thread.interrupt()
是否安全?静态方法中声明的对象不会在线程之间共享。在方法之外定义为静态的对象是共享的
因此:
如果要在执行I/O的线程上调用interrupt()
,则应该考虑使用实现的类。静态方法中声明的变量不会在线程之间共享。当静态方法不修改任何静态或其他共享对象时,它是线程安全的——这意味着多个线程可以调用该方法,不会发生任何不好的情况
,当中断一个线程时,很多事情都会出错。但似乎没有线程调用,静态方法就是其中之一。我可能错了。关于中断()-->
这取决于如何处理IO线程上的中断。不管名称如何,interrupt()只不过是将中断消息传递给给定的线程。这并不意味着要尽快停止运行。接收线程将看到此消息并引发InterruptedException。那么它将如何应对这种情况完全取决于它的能力。它可以选择忽略它,重新启动自己,关闭,等等
当你需要告诉另一个线程一些基本的东西已经改变,当前的执行上下文可能不再有效、不可取、不可能或者你需要的任何东西时,通常会使用中断。正确的答案是:静态与非静态,这无关紧要
局部变量始终是方法调用的局部变量,无论方法是否是静态的。它们在堆栈上分配,并在方法退出后弹出堆栈(且不可引用)
至于你的第二个问题,请阅读文档
如果您使用的是非阻塞IO,那么调用中断()
可能有意义,具体取决于您的预期(同样,请阅读文档)。如果正在执行阻塞IO,则调用interrupt()
将无效。在正在执行I/O的线程上调用thread.interrupt()
是安全的,只要I/O是在一个线程上完成的
如果该线程在可中断通道上的I/O操作中被阻塞,那么该通道将被关闭,线程的中断状态将被设置,线程将收到ClosedByInterruptException
依照
当不同线程访问静态方法时,是否在中声明对象
在java中,该方法是本地的还是线程间共享的
任何方法中声明的对象都是该方法的本地对象。无论方法是静态的还是其他的,都没有任何区别。在静态或非静态方法中声明的变量不会在不同的线程之间共享。这是两个独立的问题,应该在两篇单独的帖子中提出。调用thread.interrupt on threads在静态方法中执行io仍然是两个独立的问题问题。静态
与此无关。
private static Object thisIsShared;
public static void myMethod() {
Object thisIsNotShared = new Object();
}