image

编辑人: 沉寂于曾经

2024-10-20

0

893

java中有几种方法可以实现一个线程?

分析&回答

Java中实现线程的两种方法

  • 第一是实现Runnable接口实现它的run()方法。
  • 第二种是继承Thread类,覆盖它的run()方法。

Java多线程实现的四种方式

  • 1.继承Thread类,重写run方法
  • 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
  • 3.通过Callable和FutureTask创建线程 (通过第二种创建)
  • 4.通过线程池创建线程(通过第一种创建)

反思&扩展

启动一个线程是用run()还是start()

两种方式都是使用start()方法,start方法内调用了run方法,如果直接调用run方法,那么就相当于没有开启线程而直接调用的run方法。

方式一:
Thread thread1 = new Thread(() -> System.out.println("Hello World from Runnable!"));
thread1.start();

方式二:
Thread thread2 = new Thread() {
    @Override
    public void run() {
        System.out.println("Hello World from subclass!");
    }
};
thread2.start();

两种实现线程的方法你会优先使用那种?实现Runnable接口具有什么优势

采用Runnable接口实现线程:

优势:

  • A、线程类只是实现了Runnable接口,还可以继承其他的类(避免Java单继承)
  • B、在这种方式下,可以多个线程共享同一个目标对象,所以很合适多个线程来处理同一份资源的情况(资源共享),从而可以将CPU、代码和数据分开(数据独立),形成清晰的模型,较好的面相对象思想。
    劣势:编程稍微复杂,如果需要访问当前线程需要用Thread.currentThread方法来获取

采用继承Thread类的方式实现线程:

优势:编写简单,如果要获得当前线程直接this即可
劣势:线程类继承了Thread,不能在继承其他类

相对而言,用Runnable的方式更好,具体可以根据当前需要而定;使用 Lambda 表达式 + 匿名内部类实现超轻松。

谈谈对内部类的理解?
Lambda表达式的作用和基本语法


喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

创作类型:
原创

本文链接:java中有几种方法可以实现一个线程?

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章