Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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,我是java新手,我想知道如何做一些采访中问我的问题 您有三个线程T1、T2和T3 如何确保它们按顺序完成T1,T2,T3 面试官让我在上面写节目。 我知道这个问题可以用join或count-down-lock的概念来回答,但有些问题是我无法成功的。 你们能告诉我怎么做吗?有各种各样的方法。最简单的方法是使用,这将导致当前线程暂停,直到您正在调用的join()线程完成: someThread.join(); // the current thread won't continue until s

我是java新手,我想知道如何做一些采访中问我的问题

您有三个线程
T1
T2
T3

如何确保它们按顺序完成
T1
T2
T3

面试官让我在上面写节目。
我知道这个问题可以用
join
count-down-lock
的概念来回答,但有些问题是我无法成功的。
你们能告诉我怎么做吗?

有各种各样的方法。最简单的方法是使用,这将导致当前线程暂停,直到您正在调用的
join()
线程完成:

someThread.join();
// the current thread won't continue until someThread completes
然后,你可以让T3连接在T2上,T2连接在T1上

但是如果我是你的话,我会问面试官为什么他们要按照这个顺序来完成。是因为T3消耗T2产生的东西吗?如果是这样的话,像a这样的东西可能会更好,因为它不那么脆弱——你可以改变哪个线程来消费或生产这些东西,而不会损坏它们。见鬼,生产者/消费者线程可以设置为永不结束,而是让一个线程以最快的速度生产,另一个线程以最快的速度消费。线程都是关于不知道事情发生的顺序,除了某些接触点(比如准备消费的东西)


因此,基本上,所提出的问题有点假。

有多种方法可以做到这一点。最简单的方法是使用,这将导致当前线程暂停,直到您正在调用的
join()
线程完成:

someThread.join();
// the current thread won't continue until someThread completes
然后,你可以让T3连接在T2上,T2连接在T1上

但是如果我是你的话,我会问面试官为什么他们要按照这个顺序来完成。是因为T3消耗T2产生的东西吗?如果是这样的话,像a这样的东西可能会更好,因为它不那么脆弱——你可以改变哪个线程来消费或生产这些东西,而不会损坏它们。见鬼,生产者/消费者线程可以设置为永不结束,而是让一个线程以最快的速度生产,另一个线程以最快的速度消费。线程都是关于不知道事情发生的顺序,除了某些接触点(比如准备消费的东西)


因此,基本上,所提出的问题有点假。

创建3个线程,但不要启动它们,然后按照以下步骤进行

t1.start();
t1.join();
t2.start();
t2.join();
t3.start();

Thread.join等待一个线程终止,因此保证了顺序

创建3个线程,但不启动它们,然后按如下步骤操作

t1.start();
t1.join();
t2.start();
t2.join();
t3.start();

join等待线程终止,因此对我来说,顺序是有保证的,这是一个技巧性的问题。我会问面试官为什么要他们按特定的顺序完成。坦白地说,除了主线程等待其子线程外,我看不到任何情况下我希望单独的线程按特定顺序完成。

对我来说,这是一个技巧性的问题。我会问面试官为什么要他们按特定的顺序完成。坦白地说,我看不到任何情况下,除了等待其子线程的主线程之外,我希望单独的线程以特定的顺序完成。

如果线程应该按顺序完成,那么为什么不将所有三个线程的代码放在一个线程的运行中?

如果线程应该按顺序完成,那么为什么不把所有三个线程的代码放在一个线程的运行中呢?

面试官想测试我,请建议如果唯一的要求是线程以特定的顺序完成,那么Evgeniy回答是一个可行的解决方案。然而,雇主往往希望员工在需求不明确或设计方案不符合标准时,能够自己思考,自己说话。在我的书中,设计有效解决方案的能力比背诵特定接口更重要。javadoc中提供了接口的细节。学习如何编写有效的解决方案要困难得多,需要经验和能力。面试官想测试我,请建议如果唯一的要求是线程按特定顺序完成,那么Evgeny答案是可行的解决方案。然而,雇主往往希望员工在需求不明确或设计方案不符合标准时,能够自己思考,自己说话。在我的书中,设计有效解决方案的能力比背诵特定接口更重要。javadoc中提供了接口的细节。学习如何编写有效的解决方案要困难得多,需要经验和才能。它不是将主线连接到这些(t1、t2和t3)上,而不是将t3连接到t2和t2连接到t2上吗。我试过了,但不知何故每次都奏效了。。有什么解释吗?它没有将主线程连接到这些线程(t1、t2和t3),而不是将t3连接到t2和t2连接到t2。我试过了,但不知何故每次都奏效了。。有什么解释吗?