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

Java 关于线程的一般性讨论(混淆)

Java 关于线程的一般性讨论(混淆),java,multithreading,Java,Multithreading,我只是想知道以下两种调用线程的方法之间的区别 请看这两个场景的两张图片 我的问题是,我所面临的行为是当我遵循“场景1”时,我失去了对我的程序和程序的控制 MyClass中的“//其他命令”未运行 当我遵循场景二时,我的顺序是平稳的。是否有人注意到这种行为或是故障 请给出你的意见 关于,我想不是实现线程(这不是前面提到的接口),而是要实现可运行 所以问题似乎是(这只是一个猜测,因为你的问题不存在):谁应该启动线程-MyClass或MyThread 基本上,我更喜欢场景1,因为MyThread实

我只是想知道以下两种调用线程的方法之间的区别

请看这两个场景的两张图片

我的问题是,我所面临的行为是当我遵循“场景1”时,我失去了对我的程序和程序的控制

MyClass中的“//其他命令”未运行

当我遵循场景二时,我的顺序是平稳的。是否有人注意到这种行为或是故障

请给出你的意见


关于,

我想不是实现
线程
(这不是前面提到的接口),而是要实现
可运行

所以问题似乎是(这只是一个猜测,因为你的问题不存在):谁应该启动线程-
MyClass
MyThread

基本上,我更喜欢场景1,因为
MyThread
实际上只是一个可运行的任务,不应该额外处理线程本身

因此,
MyClass
应该创建并启动线程。这还允许您保留对派生线程的引用,并可能在以后对其调用
join()
或其他方法


作为旁注,我将
MyThread
改为:
公共类MyRunnable实现Runnable{…}

您可能希望访问线程对象,例如,等待它完成或轮询它的状态。在场景2中,您可能不会执行此操作,因为无法从客户端代码访问变量
t
。为了实现这一点,您必须使
t
从外部代码可见,或者重写
线程
方法(这将有点徒劳)。如果<代码>调用线程是某种方便方法,可以考虑返回<代码> t>代码> < /p> 如果场景2的意思是“
MyThread
封装正在运行的线程并控制其状态”,则不必扩展
thread
(读起来有点混乱)


如中所述,我将第二次实现
Runnable
,而不是为更干净的代码子类化
Thread
。线程是一个类,而不是一个接口。所以你不能实现它。在这种情况下线程接口是什么?在标准Java中,线程是一个类,而不是一个接口。哦,对不起,伙计们,这是一个很大的错误,它不是实现线程,而是实现可运行。希望你能忽略这个错误,继续调用机制Yes thomas我想实现Runbable它不是线程那是一个打字错误我很抱歉。Chabicht我已经更改了图片这是一个打字错误它不是线程它是实现Runnable抱歉我在我的编辑后的问题。