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表达式的作用和基本语法


为了大家更加方便的刷题,我们对文章进行了分类和整理,免费为大家提供刷题服务。程序员不欺骗程序员,赶紧扫码小程序刷起来!
请添加图片描述

为了一站式解决面者刷题问题,部分内容可能存在摘录情况,如有侵权辛苦您留言联系我们,我们会删除文章或添加引用文案,Thanks!

你可能感兴趣的:(Java并发编程,java,面试)