一、继承Thread类
- 定义一个类继承线程类Thread
- 重写run()方法
- 创建线程对象
- 调用线程对象的start()方法创建线程
Thread类的常用API
- setName(String name):给线程取名字
- getName():获取线程的名字
- public static Thread currentThread():获取当前线程对象,这个代码在哪个线程中就获取哪个线程对象
- public static void sleep(long time):让当前线程休眠多少毫秒再继续执行
优点:
缺点:
- 线程类已经继承Thread就无法继承其他类了,功能无法通过继承拓展(单继承的局限性)
二、实现Runable接口
- 定义一个线程任务类实现Runable接口
- 重写run()方法
- 创建线程任务对象
- 把线程任务对象包装成线程对象
- 调用线程对象的start()方法启动线程
class MyRunable implements Runnable{
@Override
public void run() {
System.out.println("hello runable");
}
}
public static void main(String[] args) {
MyRunable target = new MyRunable();
Thread t = new Thread(target);
t.start();
}
优点:
- 避免了Java单继承的局限性
- 同一个任务对象可以被包装成多个线程对象
- 适合多个线程去共享同一个资源
- 实现解耦,线程任务代码可以被多个线程共享,线程任务代码和线程独立
- 线程池只能放入实现Runable和Callable接口的线程任务,不能直接放入继承Thread类的线程对象
缺点
匿名内部类的写法:
Runnable target = new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类写法");
}
};
Thread t = new Thread(target);
t.start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类写法");
}
}).start();
new Thread(() -> System.out.println("匿名内部类写法")).start();
三、实现Callable接口
- 定义一个线程任务类实现Callable接口,申明线程执行的结果类型
- 重写线程任务类的call方法,这个方法可以直接返回执行结果
- 创建一个Callable的线程任务对象
- 把线程任务对象包装成一个未来任务对象
- 把未来任务对象包装成线程对象
- 调用start()方法启动线程
class MyCallable implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("hello callable");
return "success";
}
}
Callable<String> call = new MyCallable();
FutureTask<String> future = new FutureTask<>(call);
Thread t = new Thread(future);
t.start();
try {
String res = future.get();
System.out.println(res);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
优点:
- 拥有所有Runable的优点
- 能直接得到线程执行的结果
缺点:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix