Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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_Oop - Fatal编程技术网

在Java中,哪个线程负责什么

在Java中,哪个线程负责什么,java,multithreading,oop,Java,Multithreading,Oop,如果我创建两个对象,它们在Java中运行到两个不同的线程。如果其中一个对象调用另一个对象中的方法。该方法是在调用该方法的对象的线程中运行还是在包含该方法的对象的线程中运行?该方法是在调用该方法的线程中运行的 类或对象不在线程中运行,而是在代码中运行。所以重要的是调用对象的方法的线程 正如Thilo所说:类和对象根本不运行。除非一个线程被显式启动,或者调用的方法在另一个线程(例如Swing Worker)中运行任务,否则它是同一个线程 在任何情况下,启动新线程的代码都在当前线程中运行,并指示JVM

如果我创建两个对象,它们在Java中运行到两个不同的线程。如果其中一个对象调用另一个对象中的方法。该方法是在调用该方法的对象的线程中运行还是在包含该方法的对象的线程中运行?

该方法是在调用该方法的线程中运行的

类或对象不在线程中运行,而是在代码中运行。所以重要的是调用对象的方法的线程


正如Thilo所说:类和对象根本不运行。

除非一个线程被显式启动,或者调用的方法在另一个线程(例如Swing Worker)中运行任务,否则它是同一个线程

在任何情况下,启动新线程的代码都在当前线程中运行,并指示JVM启动线程


每个线程都是独立于类或对象的独立执行行(多个线程尝试访问同一个对象时除外;我们在其中设置了锁定),并且在其生命周期内可以访问许多类和对象。

类根本不运行。@Thilo:没错,但这就是OP所暗示的应该发生的事情。如果一个线程上的代码调用另一个线程也可以访问的对象上的方法,您必须开始考虑线程安全性。正确的观点是“对象是状态加行为”(松散地说,对象是数据加上在其上操作的代码)。但是,当创建对象时,要理解实际上只有对象的状态(例如实例字段等)才分配到堆上。对象的代码库由类的所有对象“共享”(即使是非静态代码)。无论如何,这正是你想要的。并发问题几乎总是源于对对象状态的交叉访问,而绝不会源于对代码的交叉访问。