Skip to content

Commit

Permalink
fix: stop manually creating threads
Browse files Browse the repository at this point in the history
  • Loading branch information
tengamesinc committed Sep 3, 2023
1 parent 91af402 commit 9cd941d
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ of this software and associated documentation files (the "Software"), to deal

package com.tenio.core.command.system;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.tenio.common.logger.SystemLogger;
import com.tenio.core.bootstrap.annotation.Component;
import com.tenio.core.bootstrap.annotation.SystemCommand;
Expand All @@ -36,6 +37,7 @@ of this software and associated documentation files (the "Software"), to deal
import java.util.Map;
import java.util.Objects;
import java.util.TreeMap;
import java.util.concurrent.Executors;
import javax.annotation.concurrent.GuardedBy;

/**
Expand Down Expand Up @@ -165,8 +167,11 @@ public void invoke(String rawMessage) {

// invokes execute method for handler
Runnable runnable = () -> handler.execute(args);
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("system-command-worker-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
if (annotation.isBackgroundRunning()) {
new Thread(runnable).start();
executors.execute(runnable);
CommandUtility.INSTANCE.showConsoleMessage("The process is running in background.");
} else {
runnable.run();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,25 +178,25 @@ public void setDisconnectedPlayerScanInterval(int interval) {
@Override
public void setCcuReportInterval(int interval) {
ccuReportTask.setInterval(interval);
enableCcuReportTask = (interval <= 0);
enableCcuReportTask = (interval > 0);
}

@Override
public void setDeadlockScanInterval(int interval) {
deadlockScanTask.setInterval(interval);
enableDeadLockScanTask = (interval <= 0);
enableDeadLockScanTask = (interval > 0);
}

@Override
public void setTrafficCounterInterval(int interval) {
trafficCounterTask.setInterval(interval);
enableTrafficCounterTask = (interval <= 0);
enableTrafficCounterTask = (interval > 0);
}

@Override
public void setSystemMonitoringInterval(int interval) {
systemMonitoringTask.setInterval(interval);
enableSystemMonitoringTask = (interval <= 0);
enableSystemMonitoringTask = (interval > 0);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,19 @@ public static AutoCleanOrphanSessionTask newInstance(EventManager eventManager)

@Override
public ScheduledFuture<?> run() {
var threadFactory =
var threadFactoryTask =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("auto-clean-orphan-session-task" +
"-%d").build();
return Executors.newSingleThreadScheduledExecutor(threadFactory).scheduleAtFixedRate(
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("auto-clean-orphan-worker-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
return Executors.newSingleThreadScheduledExecutor(threadFactoryTask).scheduleAtFixedRate(
() -> {
if (isDebugEnabled()) {
debug("AUTO CLEAN ORPHAN SESSION",
"Checking orphan sessions in ", sessionManager.getSessionCount(), " entities");
}
var worker = new Thread(() -> {
executors.execute(() -> {
Iterator<Session> iterator = sessionManager.getReadonlySessionsList().listIterator();
while (iterator.hasNext()) {
Session session = iterator.next();
Expand All @@ -91,9 +94,6 @@ public ScheduledFuture<?> run() {
}
}
});
worker.setDaemon(true);
worker.setName("auto-clean-orphan-session-worker");
worker.start();
}, initialDelay, interval, TimeUnit.SECONDS);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,20 @@ public static AutoDisconnectPlayerTask newInstance(EventManager eventManager) {

@Override
public ScheduledFuture<?> run() {
var threadFactory =
var threadFactoryTask =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("auto-disconnect-player-task-%d")
.build();
return Executors.newSingleThreadScheduledExecutor(threadFactory).scheduleAtFixedRate(
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("auto-disconnect-player-worker" +
"-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
return Executors.newSingleThreadScheduledExecutor(threadFactoryTask).scheduleAtFixedRate(
() -> {
if (isDebugEnabled()) {
debug("AUTO DISCONNECT PLAYER",
"Checking IDLE players in ", playerManager.getPlayerCount(), " entities");
}
var worker = new Thread(() -> {
executors.execute(() -> {
Iterator<Player> iterator = playerManager.getReadonlyPlayersList().listIterator();
while (iterator.hasNext()) {
Player player = iterator.next();
Expand All @@ -99,9 +103,6 @@ public ScheduledFuture<?> run() {
}
}
});
worker.setDaemon(true);
worker.setName("auto-disconnect-player-worker");
worker.start();
}, initialDelay, interval, TimeUnit.SECONDS);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,19 @@ public static AutoRemoveRoomTask newInstance(EventManager eventManager) {

@Override
public ScheduledFuture<?> run() {
var threadFactory =
var threadFactoryTask =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("auto-remove-room-task-%d")
.build();
return Executors.newSingleThreadScheduledExecutor(threadFactory).scheduleAtFixedRate(
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("auto-remove-room-worker-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
return Executors.newSingleThreadScheduledExecutor(threadFactoryTask).scheduleAtFixedRate(
() -> {
if (isDebugEnabled()) {
debug("AUTO REMOVE ROOM",
"Checking empty rooms in ", roomManager.getRoomCount(), " entities");
}
var worker = new Thread(() -> {
executors.execute(() -> {
Iterator<Room> iterator = roomManager.getReadonlyRoomsList().listIterator();
while (iterator.hasNext()) {
Room room = iterator.next();
Expand All @@ -85,9 +88,6 @@ public ScheduledFuture<?> run() {
}
}
});
worker.setDaemon(true);
worker.setName("auto-remove-room-worker");
worker.start();
}, initialDelay, interval, TimeUnit.SECONDS);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,15 @@ public static CcuReportTask newInstance(EventManager eventManager) {

@Override
public ScheduledFuture<?> run() {
var threadFactory =
var threadFactoryTask =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ccu-report-task-%d").build();
return Executors.newSingleThreadScheduledExecutor(threadFactory).scheduleAtFixedRate(
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("ccu-report-worker-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
return Executors.newSingleThreadScheduledExecutor(threadFactoryTask).scheduleAtFixedRate(
() -> {
var worker = new Thread(() -> eventManager.emit(ServerEvent.FETCHED_CCU_INFO,
executors.execute(() -> eventManager.emit(ServerEvent.FETCHED_CCU_INFO,
playerManager.getPlayerCount()));
worker.setDaemon(true);
worker.setName("ccu-report-worker");
worker.start();
},
initialDelay, interval, TimeUnit.SECONDS);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,14 @@ public static DeadlockScanTask newInstance(EventManager eventManager) {

@Override
public ScheduledFuture<?> run() {
var threadFactory =
var threadFactoryTask =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("deadlock-scan-task-%d").build();
return Executors.newSingleThreadScheduledExecutor(threadFactory).scheduleAtFixedRate(
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("deadlock-scan-worker-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
return Executors.newSingleThreadScheduledExecutor(threadFactoryTask).scheduleAtFixedRate(
() -> {
var worker = new Thread(this::checkForDeadlockedThreads);
worker.setDaemon(true);
worker.setName("deadlock-scan-worker");
worker.start();
executors.execute(this::checkForDeadlockedThreads);
},
initialDelay, interval, TimeUnit.SECONDS);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,19 +60,19 @@ public static SystemMonitoringTask newInstance(EventManager eventManager) {

@Override
public ScheduledFuture<?> run() {
var threadFactory =
var threadFactoryTask =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("system-monitoring-task-%d")
.build();
return Executors.newSingleThreadScheduledExecutor(threadFactory).scheduleAtFixedRate(
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("system-monitoring-worker-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
return Executors.newSingleThreadScheduledExecutor(threadFactoryTask).scheduleAtFixedRate(
() -> {
var worker = new Thread(
executors.execute(
() -> eventManager.emit(ServerEvent.SYSTEM_MONITORING, systemMonitoring.getCpuUsage(),
systemMonitoring.getTotalMemory(), systemMonitoring.getUsedMemory(),
systemMonitoring.getFreeMemory(),
systemMonitoring.countRunningThreads()));
worker.setDaemon(true);
worker.setName("system-monitoring-worker");
worker.start();
},
initialDelay, interval, TimeUnit.SECONDS);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,20 +58,20 @@ public static TrafficCounterTask newInstance(EventManager eventManager) {

@Override
public ScheduledFuture<?> run() {
var threadFactory =
var threadFactoryTask =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("traffic-counter-task-%d").build();
return Executors.newSingleThreadScheduledExecutor(threadFactory).scheduleAtFixedRate(
var threadFactoryWorker =
new ThreadFactoryBuilder().setDaemon(true).setNameFormat("traffic-counter-worker-%d").build();
var executors = Executors.newCachedThreadPool(threadFactoryWorker);
return Executors.newSingleThreadScheduledExecutor(threadFactoryTask).scheduleAtFixedRate(
() -> {
var worker = new Thread(() -> eventManager.emit(ServerEvent.FETCHED_BANDWIDTH_INFO,
executors.execute(() -> eventManager.emit(ServerEvent.FETCHED_BANDWIDTH_INFO,
networkReaderStatistic.getReadBytes(),
networkReaderStatistic.getReadPackets(),
networkReaderStatistic.getReadDroppedPackets(),
networkWriterStatistic.getWrittenBytes(), networkWriterStatistic.getWrittenPackets(),
networkWriterStatistic.getWrittenDroppedPacketsByPolicy(),
networkWriterStatistic.getWrittenDroppedPacketsByFull()));
worker.setDaemon(true);
worker.setName("traffic-counter-worker");
worker.start();
},
initialDelay, interval, TimeUnit.SECONDS);
}
Expand Down

0 comments on commit 9cd941d

Please sign in to comment.