首页 > 试题广场 >

有三个线程T1,T2,T3,下面方法可以确保它们按顺序执行的

[不定项选择题]
有三个线程T1,T2,T3,下面方法可以确保它们按顺序执行的有()该线程继续执行
  • 先启动最后一个(T3调用T2,T2调用T1)
  • 可以用线程类的join()方法在一个线程中启动另一个线程,另一个线程完成
  • 先启动第一个(T3调用T2,T2调用T1)
  • 以上选项说法都不正确
应该选ABC.亲测!!!!
实际上先启动三个线程中哪一个都行,
因为在每个线程的run方法中用join方法限定了三个线程的执行顺序。
即便是第二个线程先启动执行了,由于t1.join()方法,
使得线程2需要等待线程1运行结束后才能继续运行。
所以三个线程的启动顺序无关紧要!!!

public class JoinTest2 {

	// 1.现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行

	public static void main(String[] args) {

		final Thread t1 = new Thread(new Runnable() {

			@Override
			public void run() {
				System.out.println("t1");
			}
		});
		final Thread t2 = new Thread(new Runnable() {

			@Override
			public void run() {
				try {
					// 引用t1线程,等待t1线程执行完
					t1.join();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("t2");
			}
		});
		Thread t3 = new Thread(new Runnable() {

			@Override
			public void run() {
				try {
					// 引用t2线程,等待t2线程执行完
					t2.join();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("t3");
			}
		});
		t3.start();//这里三个线程的启动顺序可以任意,大家可以试下!
		t2.start();
		t1.start();
	}
}


编辑于 2017-05-03 16:07:48 回复(11)

感觉只有B对,AC没有说具体调用什么方法,同意的扣1,join方法的用法是如果主线程需要用到子线程的处理结果,主线程需要子线程调用结束后再结束,就需要用到join,在主线程join代码之后,会等到子线程结束后,再执行join之后的代码

编辑于 2020-06-05 08:16:59 回复(0)
选bc
发表于 2016-01-19 16:27:38 回复(0)
BC答案正确,要想实现T1、T2、T3按照顺序执行,需要先执行T1,接着调用join()方法,实现执行完T1,就执行T2,同理实现执行完T2,执行T3线程。源代码如下:
package com.test.thread;

/***
 * 有三个线程T1、T2、T3,如何保证他们按照顺序执行
 * 
 * @author cxj123
 *
 */
public class JoinTest2 {
// 现在有T1、T2、T3三个线程,如何保证T2在T1执行完后执行,T3在T2执行完后执行
public static void main(String[] args) {
final Thread t1 = new Thread(new Runnable() {

@Override
public void run() {
System.out.println("t1 run");

}
});

final Thread t2 = new Thread(new Runnable() {

@Override
public void run() {

try {
// 引用T1线程,等待T1线程执行完
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("T2 run");
}

});

final Thread t3 = new Thread(new Runnable() {

@Override
public void run() {
// 引用t2线程,等待t2线程执行完成
try {
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t3 run");
}

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

}

}

发表于 2015-12-04 09:31:35 回复(1)
最简单粗暴的技巧就是排除法
发表于 2017-06-11 13:48:33 回复(0)
A正好反了,在执行T3的时候调用T2,但是T3线程肯定先被创建执行....所以A选项最后的执行顺序应该是典型的递归调用执行顺序
也就是 3,2,1,2,3
发表于 2016-03-21 16:03:41 回复(1)
貌似答案A也是可以得吧。
比如如下的这种写法:


public class JoinTest3 {
// 现在有T1、T2、T3三个线程,如何保证T2在T1执行完后执行,T3在T2执行完后执行
public static void main(String[] args) {
final Thread t1 = new Thread(new Runnable() {

@Override
public void run() {
System.out.println("t1 run");
}
});

final Thread t2 = new Thread(new Runnable() {

@Override
public void run() {
try {
// 引用T1线程,等待T1线程执行完
t1.start();
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("T2 run");
}
});

final Thread t3 = new Thread(new Runnable() {

@Override
public void run() {
// 引用t2线程,等待t2线程执行完成
try {
t2.start();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t3 run");
}

});
t3.start();

}
}

发表于 2016-03-14 13:21:59 回复(0)
应该先启动最后一个T3。。。选AC吧。。吧。。。
发表于 2016-02-27 23:34:21 回复(0)
这里A、C有说是使用Join吗,为啥大家都这么兴高采烈就代入了A、C是使用Join的啊
发表于 2023-09-26 13:30:30 回复(0)
确保按顺序执行和线性执行是一个概念吗?总觉得应该是join一个后,在join另一个;感觉只有B正确
发表于 2022-03-18 21:37:56 回复(0)
感觉A、C说的不清不楚的,“T3调用T2”,怎么调用的?。。
发表于 2022-01-11 18:46:05 回复(0)
<p>B</p>
发表于 2020-06-06 01:31:22 回复(0)
B和C
编辑于 2020-04-16 14:18:20 回复(0)
A的话看调用join方法,但是题目中又没有给出来,答案真的没问题么
发表于 2020-02-13 10:20:20 回复(1)
csdn上有讲解,经过验证,ABC三项正确。在验证第二项时,给出的代码错误,更正方法是执行start方法的线程和执行join的线程是同一个线程即可。并且顺序执行是按照启动顺序执行,而不是T1,T2,T3的顺序执行。个人理解。
编辑于 2018-10-24 13:53:39 回复(0)
在每个线程的run方法中用join方法限定了三个线程的执行顺序。
发表于 2018-10-22 11:18:13 回复(0)
T3调用T2,T2调用T1,这个调用指的是啥?如果是指用join方法,那答案就是ABC。
发表于 2018-03-15 18:08:56 回复(0)
这个题目有点骚,只有一个说了使用join 其他的没有说,很容易让人想到其他的默认是不使用join.没撒意思
发表于 2018-03-03 16:02:56 回复(0)
随便哪个线程先起都行
发表于 2017-08-08 09:50:38 回复(0)

 线程 t3 内部调用t2.join ,t2内部调用t1.join  请问谁先执行? 必定是t3 先执行,然后t2 先执行,最后t1 先执行。

t3 不执行 t2 是如何启动的????

谁先执行完成? t1 先完成,t2 随后,t3随后。

发表于 2017-06-22 10:26:50 回复(0)