public class TestJoin implements Runnable{
@Override
public void run() {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
for (int i = 0; i < 200; i++) {
System.out.println(i);
}
}
public static void main(String[] args) throws InterruptedException {
TestJoin testJoin = new TestJoin();
Thread thread = new Thread(testJoin);
thread.start();
for (int i = 0; i < 1000; i++) {
if(i==200){
thread.join();
}
System.out.println("main"+i);
}
}
}
第二种 extends Thread
public class TestThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("新线程:"+i);
}
}
public static void main(String[] args) {
TestThread testThread = new TestThread();
testThread.start();
for (int i = 0; i < 200; i++) {
System.out.println("旧:"+i);
}
}
}
第三种 implements Callable<?>
import java.util.concurrent.*;
public class TestCallable implements Callable<String> {
@Override
public String call() throws Exception {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+i);
}
return Thread.currentThread().getName();
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
TestCallable testCallable = new TestCallable();
ExecutorService executorService = Executors.newFixedThreadPool(3);
Future<String> submit1 = executorService.submit(testCallable);
Future<String> submit2 = executorService.submit(testCallable);
Future<String> submit3 = executorService.submit(testCallable);
System.out.println(submit1.get());
System.out.println(submit2.get());
System.out.println(submit3.get());
executorService.shutdown();
}
}