Nope, the threads will terminate depending on what happens inside of their run() method implementations. If you're simply given a currently-running thread without any access to the code it's executing, there is no way to force it to terminate (aside from calling stop() or destroy(), which are both deprecated and should not be used).
If you can write the code that these threads are running, however, it'd be really simple:
Thread t3 = new Thread(() -> {
System.out.println("Thread 3 terminating...");
});
Thread t2 = new Thread(() -> {
try { t3.join(); } catch(InterruptedException e) {};
System.out.println("Thread 2 terminating...");
});
Thread t1 = new Thread(() -> {
try { t2.join(); } catch(InterruptedException e) {};
System.out.println("Thread 1 terminating...");
});
t1.start();
t2.start();
t3.start();
runmethods terminate. What exactly are you trying to achieve?