多线程的创建(实现Runnable接口)
方式二:实现Runnable接口
定义一个线程任务类MyRunnable实现Runnable接口,重写run()方法
创建MyRunnable任务对象
把MyRunnable任务对象交给Thread处理。
调用线程对象的start()方法启动线程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.po.thread2; /** 1、定义一个线程类继承Thread类 */ public class MyThread2 implements Runnable{ /** 2、重写run方法,里面是定义线程以后要干啥 */ @Override public void run() { for ( int i = 0; i < 5; i++) { System. out .println( "子线程执行输出:" + i); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.po.thread2; public class MyThread2Test { public static void main(String[] args) { // 3、new一个新线程对象 Runnable runnable = new MyThread2(); Thread t = new Thread(runnable); // 4、调用start方法启动线程(执行的还是run方法) t.start(); for ( int i = 0; i < 5; i++) { System. out .println( "主线程执行输出:" + i); } } } |
优点:线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强。
缺点:编程多一层对象包装,如果线程有执行结果是不可以直接返回的。
实现Runnable接口(匿名内部类形式)
可以创建Runnable的匿名内部类对象。
交给Thread处理。
调用线程对象的start()启动线程。
第一种:
1 2 3 4 5 6 7 8 9 10 | Runnable target = new Runnable() { @Override public void run() { for ( int i = 0; i < 10; i++) { System. out .println( "子线程1执行输出:" + i); } } }; Thread t = new Thread(target); t.start(); |
第二种:
1 2 3 4 5 6 7 8 | new Thread( new Runnable() { @Override public void run() { for ( int i = 0; i < 10; i++) { System. out .println( "子线程2执行输出:" + i); } } }).start(); |
第三种:
1 2 3 4 5 | new Thread(() -> { for ( int i = 0; i < 10; i++) { System. out .println( "子线程3执行输出:" + i); } }).start(); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY