Java 按顺序运行的线程
我是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
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。我试过了,但不知何故每次都奏效了。。有什么解释吗?