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 - Fatal编程技术网

Java 一个线程可以同时运行两个方法吗?

Java 一个线程可以同时运行两个方法吗?,java,multithreading,Java,Multithreading,因此,我创建了以下线程: public class test extends thread{ public void run(){ // Do stuff } public void onPause(){ //Do stuff to prepare for pausing } } 现在我的问题是假设这个线程当前正在执行run()方法,并且突然从一个主线程调用onPause(),那么这会使它停止执行run()并执行onPause()

因此,我创建了以下线程:

public class test extends thread{
    public void run(){
        // Do stuff
    }
    public void onPause(){
        //Do stuff to prepare for pausing
    }
}

现在我的问题是假设这个线程当前正在执行run()方法,并且突然从一个主线程调用onPause(),那么这会使它停止执行run()并执行onPause()吗方法,还是两者同时运行?

它们将同时运行,因为正如您指出的,您正在从主线程调用
onPause

从概念上讲,将线程对象与实际线程混淆是错误的。一个线程被分配给一个线程对象,因此在该线程上调用start会在该线程上执行该线程(或其Runnable)的run方法

一个线程只是另一个对象,并且(除非您做了一些限制访问的事情,例如添加锁定),没有任何东西可以阻止多个线程执行其方法。因此可以并发调用线程的run方法;如果您的run方法调用线程上的方法,比如isInterrupted,那么将检查Thread对象的状态,而不是执行该方法的线程的状态。 (使用Thread.currentThread()访问正在执行的线程。)


养成不扩展线程而改为实现Runnable或Callable的习惯的一个好处是,由于您没有继承线程方法,所以混淆的空间会小一些。

为什么您认为不会呢?
线程将执行
run()
。“主”线程将执行
onPause()
。两个线程,每个线程执行一个单独的指令序列。一条线不能同时做两件事,但两条线可以。噢,天哪,我一直在为这件事绞尽脑汁,现在你把它提出来了,我现在明白了。我在想,当我调用onPause()时,当前运行的线程是在执行run()时调用onPause()。现在看了看,我意识到这是一个非常愚蠢的问题