001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.util; 020 021import java.util.concurrent.ScheduledThreadPoolExecutor; 022 023/** 024 * Helpers that build pre-tuned {@link java.util.concurrent} primitives for 025 * use across jPOS, currently focused on virtual-thread-backed scheduled 026 * executors with sensible shutdown semantics. 027 */ 028public class ConcurrentUtil { 029 /** Utility class; instances carry no state. */ 030 public ConcurrentUtil() {} 031 /** 032 * Returns a single-thread {@link ScheduledThreadPoolExecutor} backed by a 033 * named virtual thread, configured to drop delayed/periodic tasks at shutdown. 034 * 035 * @return the configured scheduler 036 */ 037 public static ScheduledThreadPoolExecutor newScheduledThreadPoolExecutor() { 038 ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1, 039 r -> { 040 Thread t = Thread.ofVirtual().factory().newThread(r); 041 t.setName("spaceGC"); 042 return t; 043 }); 044 stpe.setExecuteExistingDelayedTasksAfterShutdownPolicy(false); 045 stpe.setContinueExistingPeriodicTasksAfterShutdownPolicy(false); 046 return stpe; 047 } 048}