MST

星途 面试题库

面试题:Java模板方法模式在多线程环境下的应用

在多线程环境中,使用Java的模板方法模式设计一个任务执行框架。要求框架能够管理多个任务,每个任务都有开始、执行核心逻辑、结束这几个步骤,且核心逻辑由具体任务类实现。同时,要考虑线程安全问题,确保任务执行的正确性和高效性。请描述你的设计思路并给出关键代码片段。
30.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 定义抽象任务类:使用模板方法模式,定义一个抽象类作为任务的基类,包含任务执行的模板方法,其中包含开始、核心逻辑、结束步骤,核心逻辑定义为抽象方法由具体任务类实现。
  2. 线程安全管理:使用ReentrantLock来确保任务执行的线程安全,在关键步骤加锁解锁。
  3. 任务管理:使用线程池来管理多个任务的执行,提高执行效率。

关键代码片段

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.ReentrantLock;

abstract class AbstractTask {
    private final ReentrantLock lock = new ReentrantLock();

    // 模板方法
    public final void executeTask() {
        lock.lock();
        try {
            beforeExecute();
            doExecute();
            afterExecute();
        } finally {
            lock.unlock();
        }
    }

    protected void beforeExecute() {
        System.out.println("Task is starting.");
    }

    protected abstract void doExecute();

    protected void afterExecute() {
        System.out.println("Task is finished.");
    }
}

class ConcreteTask extends AbstractTask {
    @Override
    protected void doExecute() {
        System.out.println("Concrete task is executing.");
    }
}

public class TaskExecutionFramework {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            executorService.submit(new ConcreteTask()::executeTask);
        }
        executorService.shutdown();
    }
}