方式一:
继承Thread类
public class Task1 extends Thread{
@Override
public void run() {
PrimeNumber primeNumber = new PrimeNumber();
for (int i = 2; i <= 100; i++) {
if (primeNumber.isPrime(i)){
System.out.println(i);
}
}
}
}
测试:
Task1 task1 = new Task1();
task1.start();
方式二:
实现Runnable接口
public class Task2 implements Runnable{
@Override
public void run() {
LeapYear leapYear = new LeapYear();
for (int i = 1900; i <= 2023; i++) {
if (leapYear.isLeap(i)){
System.out.println(i);
}
}
}
}
测试:
Task2 task2 = new Task2();
Thread thread = new Thread(task2);
thread.start();
方式三:
实现Callable接口
public class Task3 implements Callable<Boolean> {
@Override
public Boolean call() throws Exception {
LeapYear leapYear = new LeapYear();
return leapYear.isLeap(2023);
}
}
测试:
Task3 task3 = new Task3();
FutureTask futureTask = new FutureTask(task3);
Thread thread = new Thread(futureTask);
thread.start();
System.out.println(futureTask.get());
方式四:
线程池:
ExecutorService executorService = Executors.newFixedThreadPool(8);
ThreadPoolExecutor service = (ThreadPoolExecutor) executorService;
service.setMaximumPoolSize(20);
service.execute(new Task1());
service.execute(new Task2());
try {
Future future = service.submit(new Task3());
System.out.println(future.get());
}catch (Exception e){
e.printStackTrace();
}finally {
service.shutdown();
}