利用JUC包创建线程的三种方式:
- 通过继承
Thread类创建线程类 - 实现
Runnable接口创建线程类 - 通过
Callable和Future接口创建线程
继承Thread类创建线程
class Thread1 extends Thread {
@Override
public void run() {
System.out.println("启动线程1");
}
}
实现Runnable创建线程
class Thread2 implements Runnable {
@Override
public void run() {
System.out.println("启动线程2");
}
}
通过Callable和Future接口创建线程
class CallableClass implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println("启动线程3");
return 200;
}
}
测试函数:
import java.util.concurrent.*;
public class TestThread {
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
CallableClass call = new CallableClass();
FutureTask<Integer> future =
new FutureTask<>(call);
Thread t3 = new Thread(future);
t1.start();
t2.run();
t3.start();
}
}

根据JDK文档的说法,这里的FutureTask实现了Future接口,同时也实现了Runnable接口。

追溯一下源码:


















![[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)](https://img-blog.csdnimg.cn/direct/a25d17ccb3bd424f8e88d47e6ea67e8d.png)


