スレッド間データ伝達の Java ThreadLocal の実装方法

JavaのThreadLocalは一つのスレッド内での異なるメソッド間でデータを共有するために使用できますが、スレッド間のデータ共有には直接使用できません。スレッド間でデータを共有する必要がある場合は、以下のような方法で実現できます。

  1. ExecutorServiceのsubmit()メソッドでタスクをサブミットする際に、データを渡す場合は引数としてタスクオブジェクトに渡します。
ExecutorService executor = Executors.newFixedThreadPool(10);
ThreadLocal<String> threadLocal = new ThreadLocal<>();

executor.submit(() -> {
    threadLocal.set("data");
    // 业务逻辑...
    String data = threadLocal.get();
    // 在这里可以获取到传递的数据
});
  1. initialValue() メソッドを使用してデータを初期化し、それをスレッドの run() メソッドに渡します。
ThreadLocal<String> threadLocal = new ThreadLocal<String>() {
    @Override
    protected String initialValue() {
        return "data";
    }
};

Thread thread = new Thread(() -> {
    String data = threadLocal.get();
    // 在这里可以获取到传递的数据
});
thread.start();

スレッド間でデータをやり取りする際は、ThreadLocalには一定のリスクがあるので、データの正確性と一貫性を確保する必要があります。また、ThreadLocalを使用する場合は、ThreadLocal内のデータを適宜クリーンアップして、メモリリークを防ぐ必要があることに注意してください。

bannerAds