溫馨提示×

如何在Java中實(shí)現(xiàn)Active對象

小樊
82
2024-09-06 11:12:37
欄目: 編程語言

在Java中實(shí)現(xiàn)Active對象模式,可以通過創(chuàng)建一個包含線程池的類來實(shí)現(xiàn)

  1. 首先,創(chuàng)建一個實(shí)現(xiàn)Runnable接口的ActiveObject類:
public class ActiveObject implements Runnable {
    private final BlockingQueue<Runnable> queue;

    public ActiveObject() {
        this.queue = new LinkedBlockingQueue<>();
    }

    @Override
    public void run() {
        while (true) {
            try {
                Runnable task = queue.take();
                task.run();
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
        }
    }

    public void addTask(Runnable task) {
        try {
            queue.put(task);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}
  1. 創(chuàng)建一個包含線程池的ActiveObjectManager類:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ActiveObjectManager {
    private final ExecutorService executorService;

    public ActiveObjectManager(int numberOfThreads) {
        this.executorService = Executors.newFixedThreadPool(numberOfThreads);
    }

    public void submit(ActiveObject activeObject) {
        executorService.submit(activeObject);
    }

    public void shutdown() {
        executorService.shutdown();
    }
}
  1. 使用ActiveObject和ActiveObjectManager:
public class Main {
    public static void main(String[] args) {
        int numberOfThreads = 4;
        ActiveObjectManager manager = new ActiveObjectManager(numberOfThreads);

        ActiveObject activeObject1 = new ActiveObject();
        ActiveObject activeObject2 = new ActiveObject();

        manager.submit(activeObject1);
        manager.submit(activeObject2);

        activeObject1.addTask(() -> System.out.println("Task 1 executed by ActiveObject 1"));
        activeObject1.addTask(() -> System.out.println("Task 2 executed by ActiveObject 1"));

        activeObject2.addTask(() -> System.out.println("Task 1 executed by ActiveObject 2"));
        activeObject2.addTask(() -> System.out.println("Task 2 executed by ActiveObject 2"));

        manager.shutdown();
    }
}

這個示例中,我們創(chuàng)建了兩個ActiveObject實(shí)例,并將它們提交給ActiveObjectManager。然后,我們向這些ActiveObject實(shí)例添加任務(wù),這些任務(wù)將由線程池中的線程執(zhí)行。最后,我們關(guān)閉線程池。

0