面试题2023:Java线程的实现方式

这篇具有很好参考价值的文章主要介绍了面试题2023:Java线程的实现方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述:

这是一道频率出现比较高的面试题,像阿里、腾讯、京东的Java初中级工程师面试题都出现过、面试过了薪水也能拿个10K~20K,所以掌握这些基础的知识还是有必要的。

1、继承Thread类,重写run方法

启动线程使用的是start方法,这样会启动一个新的线程,并执行线程的任务。如果直接调用run方法,则可以执行run方法中的逻辑代码。

public class ThreadDemo {

    public static void main(String[] args) {
        MyJob job = new MyJob();
        job.start();
    }

    static class MyJob extends Thread{
        @Override
        public void run() {
            for (int i = 0; i < 20; i++) {
                System.out.println("数字:" + i);
            }
        }
    }
}

2、实现Runnable接口,重写run方法

此方法比继承Thread要灵活,因为类只能继承一个父类,而可以实现多个接口

public class RunnabeDemo {

    public static void main(String[] args) {
        new Thread(new MyRunnable()).start();
    }

    static class MyRunnable implements Runnable{
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println("runnale:" + i);
            }
        }
    }
}

3、实现Callabe,重写call方法,然后与FutureTask一起使用

callable一般用于有返回值非阻塞的方法中

public class CallableDemo {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        MyCallable callable = new MyCallable();
        FutureTask<String> task = new FutureTask(callable);
        Thread thread = new Thread(task);
        thread.start();
        Object o = task.get();
        System.out.println(o);
    }

    static class MyCallable implements Callable<String>{

        @Override
        public String call() throws Exception {
            int count = 0;
            for (int i = 0; i < 10; i++) {
                System.out.println("MyCallable== " + i);
                count += i;
            }
            return count + "";
        }
    }
}

4、使用ExecutorService、Callable、Future实现有返回结果的线程:

ExecutorService、Callable、Future三个接口实际上都是属于Executor框架。返回结果的线程是在JDK1.5中引入的新特征,有了这种特征就不需要再为了得到返回值而大费周折了。而且自己实现了也可能漏洞百出。
可返回值的任务必须实现Callable接口。类似的,无返回值的任务必须实现Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。

注意:get方法是阻塞的,即:线程无返回结果,get方法会一直等待。
再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。

public class ThreadPoolDemo {

    @Autowired
    private ThreadPoolExecutor threadPoolExecutor;

    public void execute() throws InterruptedException, ExecutionException {

        CountDownLatch countDownLatch = new CountDownLatch(5);
        Future future = threadPoolExecutor.submit(() -> {
            System.out.println("hello");
        });
        Object o = future.get();
        countDownLatch.await();

    }



    @Slf4j
    public class QuartzRunnable implements Callable {

        private Object target;
        private Method method;
        private String params;

        @Override
        public Object call() throws Exception {
            ReflectionUtils.makeAccessible(method);
            if (StringUtils.isNotBlank(params)) {
                method.invoke(target, params);
            } else {
                method.invoke(target);
            }
            return null;
        }
    }

}

@Configuration
@EnableAsync
class ThreadPool {
    @Value("${threadPool.core-pool-size}")
    private int corePoolSize;

    @Value("${threadPool.max-pool-size}")
    private int maxPoolSize;

    @Value("${threadPool.keep-alive-time}")
    private int keepAliveTime;

    public ThreadPoolExecutor getExecutor() {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
                corePoolSize,
                maxPoolSize,
                keepAliveTime,
                TimeUnit.MICROSECONDS,
                new ArrayBlockingQueue<>(300)
        );
        return executor;
    }
}

5、总结

上面四种方法,本质上都是实现了Runnable的方法文章来源地址https://www.toymoban.com/news/detail-426425.html

到了这里,关于面试题2023:Java线程的实现方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 实现多线程的三种方式

    1、三种方法的介绍和比较 1、1三种方式得介绍 1、继承Thread类 2、实现Runnable接口 3、实现Callable接口 1、2三种方法的介绍和比较 1、2、1、实现Runnable接口相比继承Thread类有如下优势 1、增强程序的健壮性,将业务逻辑与线程调度分离 2、线程池只能放入实现Runable或Callable类线程

    2024年02月02日
    浏览(47)
  • 2023前端超全面试题,全是金三银四面试真题整理!附答案。

    目录 HTML 标签语意化 HTML5新特性 SEO input元素的类型 iframe的特点 CSS Flex BFC 重排重绘 CSS优先级 CSS3新特性 清除浮动的方法 盒模型的理解 响应式布局 移动适配方案 三栏布局 圣杯布局和双飞翼布局 JS JS为何是单线程 JS数据类型 js判断数据类型 js中的length属性 判断空对象 判断空

    2024年02月08日
    浏览(50)
  • 线程方法接收参数和返回参数,Java的两种线程实现方式对比

    总所周知,Java实现多线程有两种方式,分别是继承Thread类和实现Runable接口,那么它们的区别是什么? 继承 Thread 类: 通过继承 Thread 类,你可以创建一个直接表示线程的类。你可以覆盖 Thread 类中的 run 方法来定义线程的逻辑。当调用 start 方法启动线程时,会执行该类中的

    2024年02月11日
    浏览(45)
  • java 实现开启异步线程的几种方式

    在Java中,有多种方式可以实现异步线程以避免在主线程中执行耗时操作导致界面卡顿的问题。以下是几种常用的方式: 使用 Thread 类:可以使用 Thread 类来创建一个新的线程,并在其 run() 方法中执行耗时操作。例如: 使用 Runnable 接口:可以通过实现 Runnable 接口并在其中实现

    2024年02月14日
    浏览(48)
  • 【Java】常见面试题:多线程

    努力经营当下 直至未来明朗 答:① 进程包含线程; ② 线程比进程更轻量,创建更快、销毁也更快; ③ 同一个进程的多个线程之间共用一份内存和文件资源,而进程和进程之间则是独立的文件和内存资源;线程共用资源就省去了线程分配资源的过程 ④ 进程是资源分配的基

    2024年03月21日
    浏览(41)
  • java八股文面试[多线程]——Synchronized的底层实现原理

    笔试:画出Synchronized 线程状态流转 实现原理图 synchronized解决的是多个线程之间访问资源的同步性,synchronized 翻译为中文的意思是 同步 ,也称之为”同步锁“。 synchronized的作用是保证在 同一时刻 , 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的

    2024年02月10日
    浏览(48)
  • Java线程池常见面试题详解

    池化技术 池化技术是一种常见的编程技巧, 把一些能够复用的东西(比如说数据库连接、线程)放到池中,避免重复创建、销毁的开销,在需要时可以重复使用这些预先准备的资源,从而极大提高性能。(提前保存大量资源, 以备不时之需) 线程池、数据库连接池、Http 连接池等

    2023年04月26日
    浏览(80)
  • for循环内线程池并发执行任务,等到子线程全部处理完任务,主线程在执行java的实现方式

    for循环内线程池并发执行任务,等到子线程全部处理完任务,主线程在执行 方式一 使用 CountDownLatch 在 Java 中,您可以使用 CountDownLatch 来实现主线程等待子线程执行完成的功能。CountDownLatch 是一个同步工具类,它允许一个或多个线程等待其他线程完成操作后再继续执行。 具

    2024年02月11日
    浏览(44)
  • 如何在Java实现TCP方式发送和接收Socket消息(多线程模式)

    在Java编程中,使用TCP协议进行Socket通信是非常常见的场景。本文将详细介绍如何在Java中实现TCP方式发送和接收Socket消息,并且利用多线程模式来提高通信效率。 首先,我们需要创建一个Server端来处理接收到的Socket连接请求。以下是实现的步骤: 创建一个ServerSocket对象,并指

    2024年02月12日
    浏览(39)
  • Java多线程:进程与线程概述

    进程和线程 谈到多线程,就得先讲进程和线程的概念。 进程 进程可以理解为受操作系统管理的基本运行单元。360浏览器是一个进程、WPS也是一个进程,正在操作系统中运行的\\\".exe\\\"都可以理解为一个进程 线程 进程中独立运行的子任务就是一个线程。像QQ.exe运行的时候就有很

    2023年04月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包