在下面运行我的测试代码,似乎在它仍在执行时调用线程方法会在当前执行的线程之间运行该方法。 我想知道到底发生了什么?
线程是否暂停 while 循环,执行方法,然后返回循环?它是在 while 代码的末尾还是在两者之间的任何地方这样做?
或者该方法是否在另一个单独的线程中执行?还是别的东西?
package test;
public class main {
public static threed thred = new threed();
public static void main(String[] args) throws InterruptedException {
thred.start();
Thread.sleep(10000);
while (true) {
System.out.println("doing it");
thred.other();
Thread.sleep(2000);
thred.x++;
}
}
}
和
package test;
public class threed extends Thread {
public int x;
public threed() {
x = 0;
}
public void run() {
while (x < 10) {
System.out.println(x);
}
}
public void other() {
System.out.println("other " + x);
}
}
最佳答案
所有调用的方法都使用当前线程处理所有对象。如果您在 Thread
上调用方法,它也会像在当前线程上调用任何其他方法一样调用该方法。
唯一有点困惑的是 start()
启动另一个线程并为该新线程调用 run()
。
这是最好不要扩展 Thread
而是将 Runnable
传递给它的原因之一,因为这些方法通常不会执行它们看起来应该执行的操作否则您会出现意想不到的副作用。
注意:Java 通常在堆上有一个代理对象,用于管理实际上在堆外( native )的资源。例如。直接 ByteBuffer 或 JTable 或 Socket 或 FileOutputStream。这些对象并不是操作系统所理解的实际资源,而是 Java 用来简化从 Java 代码管理/操作资源的对象。
关于java - 当你在一个已经工作的线程中调用一个方法时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51710285/