欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > JavaEE-多线程实战02

JavaEE-多线程实战02

2025/5/3 2:36:14 来源:https://blog.csdn.net/bit_10/article/details/147566998  浏览:    关键词:JavaEE-多线程实战02

接上

多线程编程实战01


 第三个多线程程序

package thread.test;//定义了一个叫MyThread3的类,实现了Runable接口,所以它必须重写run()方法
class MyThread3 implements Runnable {@Overridepublic void run() {//线程执行的具体内容//进入一个无限循环,每一秒输出一句“hello runnable”while (true) {System.out.println("hello runnable");try {//让线程睡眠1秒。避免一直疯狂输出Thread.sleep(1000);} catch (InterruptedException e) {//如果睡眠被中断,抛出运行时异常RuntimeExceptionthrow new RuntimeException(e);}}}
}//主程序入口
public class ThreadDemo3 {public static void main(String[] args) {//新建一个线程,线程要执行的人物是MyThread3实现的run()方法Thread t=new Thread(new MyThread3());//启动线程,注意:不是调用run(),这样才会新建一个线程t.start();//主线程也进入无限循环while (true) {//每一秒输出一行“hello main”System.out.println("hello main");try {//让线程休眠1秒Thread.sleep(1000);} catch (InterruptedException e) {//如果休眠中断,抛出运行时异常throw new RuntimeException(e);}}}
}

Runnable 和 Thread 的区别

特点Runnable 接口Thread
本质是一个接口是一个,继承自 Object,实现了 Runnable 接口
用途只定义了一个任务(run() 方法),不负责线程的创建既可以定义任务(重写 run()),也能直接创建和管理线程
继承限制可以避免单继承局限(因为类还可以继承别的类)继承了 Thread 后,不能再继承其他类(Java 单继承)
推荐使用场景任务和线程分离,程序更灵活、解耦小项目、简单场景下可以直接继承 Thread 简单快速

为什么写 Thread t = new Thread(new MyThread3());

原因就是:

  • new MyThread3() 是一个实现了 Runnable 的对象,它描述了线程应该执行什么任务(即 run() 方法里的代码)。

  • new Thread(Runnable target) 这个构造方法,把 Runnable 包装进去,真正由 Thread 来创建和控制线程

  • 最后通过 t.start() 来开启这个线程,执行 MyThread3.run() 里面的逻辑。

简单理解就是

  • Runnable 负责写任务(要干什么事)。

  • Thread 负责开辟新线程、调度执行这个任务。

打个比方(形象理解)

  • Runnable 就像是工作说明书(比如说明:搬砖、洗衣服、打扫卫生)。

  • Thread 就像是真正的工人,要按照说明书去干活。

你可以写好很多不同的说明书(不同的 Runnable),然后招很多工人(Thread)去根据说明来工作。

例子

方式一:实现 Runnable(推荐 ✅)
class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("任务开始了");}
}public class Test {public static void main(String[] args) {Runnable r = new MyRunnable();  // 任务Thread t = new Thread(r);        // 线程 + 任务t.start();                      // 开启线程}
}
 方式二:直接继承 Thread(简单,但不够灵活)
class MyThread extends Thread {@Overridepublic void run() {System.out.println("任务开始了");}
}public class Test {public static void main(String[] args) {Thread t = new MyThread();   // 直接是线程t.start();                  // 开启线程}
}

总结一下

  • Runnable 只管写任务,不管线程怎么执行。

  • Thread 既是线程本身,也能直接运行任务。

  • 推荐用 Runnable,因为更加灵活,避免继承带来的局限,可以更好地与线程池等高级功能结合。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词