繼承 Thread類
/**
* 繼承Tread類,實作多線程
*/
public class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
// 線程1
new MyThread().start();
// 線程2
new MyThread().start();
// 線程3
new MyThread().start();
}
}
實作Runnable接口
/**
* 實作Runnable接口實作多線程
*/
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
new Thread(new MyRunnable()).start();
new Thread(new MyRunnable()).start();
new Thread(new MyRunnable()).start();
}
}
實作Callable接口
import java.util.concurrent.*;
/**
* 實作Callable<T>,利用線程池建立多線程
*/
public class MyCallable implements Callable<String> {
@Override
public String call() {
return Thread.currentThread().getName();
}
public static void main(String[] args) {
// 建立線程池
ExecutorService executorService = Executors.newCachedThreadPool();
Future<String> submit = executorService.submit(new MyCallable());
try {
System.out.println(submit.get());
} catch (InterruptedException | ExecutionException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}
}
}
/**
* 實作Callable<T>,利用線程池建立多線程
*/
public class MyCallable implements Callable<String> {
@Override
public String call() {
return Thread.currentThread().getName();
}
public static void main(String[] args) {
// 建立線程池
ExecutorService executorService = Executors.newCachedThreadPool();
FutureTask futureTask = new FutureTask(new MyCallable());
executorService.submit(futureTask);
try {
System.out.println(futureTask.get());
} catch (InterruptedException | ExecutionException e) {
Thread.currentThread().interrupt();
throw new RuntimeException(e);
}
}
}