Skip to content

Commit 1c04548

Browse files
committed
implemented review changes
1 parent b5073d6 commit 1c04548

File tree

7 files changed

+31
-148
lines changed

7 files changed

+31
-148
lines changed

microservices-log-aggregation/src/main/java/com/iluwatar/logaggregation/LogAggregator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.concurrent.ConcurrentLinkedQueue;
2828
import java.util.concurrent.ExecutorService;
2929
import java.util.concurrent.Executors;
30+
import java.util.concurrent.ScheduledExecutorService;
3031
import java.util.concurrent.TimeUnit;
3132
import java.util.concurrent.atomic.AtomicInteger;
3233
import lombok.extern.slf4j.Slf4j;
@@ -108,21 +109,21 @@ private void flushBuffer() {
108109
}
109110

110111
private void startBufferFlusher() {
111-
executorService.execute(() -> {
112+
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
113+
scheduler.scheduleAtFixedRate(() -> {
112114
while (!Thread.currentThread().isInterrupted()) {
113115
try {
114116
synchronized (bufferWait) {
115117
if (buffer.isEmpty()) {
116118
bufferWait.wait();
117119
}
118120
}
119-
Thread.sleep(5000); // Flush every 5 seconds.
120121
flushBuffer();
121122
} catch (InterruptedException e) {
122123
Thread.currentThread().interrupt();
123124
}
124125
}
125-
});
126+
}, 5, 5, TimeUnit.SECONDS);
126127
}
127128

128129
/**
@@ -133,4 +134,4 @@ public void bufferWake() {
133134
bufferWait.notifyAll();
134135
}
135136
}
136-
}
137+
}

microservices-log-aggregation/src/test/java/com/iluwatar/logaggregation/LogAggregatorTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,16 @@
2424
*/
2525
package com.iluwatar.logaggregation;
2626

27+
import static org.junit.jupiter.api.Assertions.assertEquals;
2728
import static org.mockito.ArgumentMatchers.any;
2829
import static org.mockito.Mockito.times;
2930
import static org.mockito.Mockito.verify;
3031

3132
import java.time.LocalDateTime;
3233
import org.junit.jupiter.api.BeforeEach;
34+
import org.junit.jupiter.api.Order;
3335
import org.junit.jupiter.api.Test;
36+
import org.junit.jupiter.api.TestMethodOrder;
3437
import org.junit.jupiter.api.extension.ExtendWith;
3538
import org.mockito.Mock;
3639
import org.mockito.junit.jupiter.MockitoExtension;

queue-based-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/App.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import java.util.concurrent.ExecutorService;
2828
import java.util.concurrent.Executors;
29+
import java.util.concurrent.ScheduledExecutorService;
2930
import java.util.concurrent.TimeUnit;
3031
import lombok.extern.slf4j.Slf4j;
3132

@@ -88,7 +89,8 @@ public static void main(String[] args) {
8889

8990
// Create e service which should process the submitted jobs.
9091
final var srvRunnable = new ServiceExecutor(msgQueue);
91-
92+
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
93+
scheduler.scheduleAtFixedRate(srvRunnable, 1, 1, TimeUnit.SECONDS);
9294
// Create a ThreadPool of 2 threads and
9395
// submit all Runnable task for execution to executor
9496
executor = Executors.newFixedThreadPool(2);

server-session/src/main/java/com/iluwatar/sessionserver/App.java

Lines changed: 20 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
import java.util.HashMap;
3232
import java.util.Iterator;
3333
import java.util.Map;
34+
import java.util.concurrent.Executors;
35+
import java.util.concurrent.ScheduledExecutorService;
36+
import java.util.concurrent.TimeUnit;
3437
import lombok.extern.slf4j.Slf4j;
3538

3639

@@ -59,8 +62,7 @@ public class App {
5962
private static Map<String, Integer> sessions = new HashMap<>();
6063
private static Map<String, Instant> sessionCreationTimes = new HashMap<>();
6164
private static final long SESSION_EXPIRATION_TIME = 10000;
62-
private static Object sessionExpirationWait = new Object(); // used to make expiration task wait or work based on event (login request sent or not)
63-
private static Thread sessionExpirationThread;
65+
6466

6567
/**
6668
* Main entry point.
@@ -79,60 +81,31 @@ public static void main(String[] args) throws IOException {
7981
server.start();
8082

8183
// Start background task to check for expired sessions
82-
sessionExpirationTask();
8384

8485
LOGGER.info("Server started. Listening on port 8080...");
86+
87+
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
88+
scheduler.scheduleAtFixedRate(App::sessionExpirationTask, SESSION_EXPIRATION_TIME, SESSION_EXPIRATION_TIME, TimeUnit.MILLISECONDS);
8589
}
8690

8791
private static void sessionExpirationTask() {
88-
sessionExpirationThread = new Thread(() -> {
89-
while (true) {
90-
try {
91-
synchronized (sessions) {
92-
if (sessions.isEmpty()) {
93-
synchronized (sessionExpirationWait) {
94-
sessionExpirationWait.wait();
95-
}
96-
}
97-
}
98-
LOGGER.info("Session expiration checker started...");
99-
Thread.sleep(SESSION_EXPIRATION_TIME); // Sleep for expiration time
100-
Instant currentTime = Instant.now();
101-
synchronized (sessions) {
102-
synchronized (sessionCreationTimes) {
103-
Iterator<Map.Entry<String, Instant>> iterator =
104-
sessionCreationTimes.entrySet().iterator();
105-
while (iterator.hasNext()) {
106-
Map.Entry<String, Instant> entry = iterator.next();
107-
if (entry.getValue().plusMillis(SESSION_EXPIRATION_TIME).isBefore(currentTime)) {
108-
LOGGER.info("User " + entry.getValue() + " removed");
109-
sessions.remove(entry.getKey());
110-
iterator.remove();
111-
}
112-
}
113-
}
92+
LOGGER.info("Session expiration checker started...");
93+
Instant currentTime = Instant.now();
94+
synchronized (sessions) {
95+
synchronized (sessionCreationTimes) {
96+
Iterator<Map.Entry<String, Instant>> iterator =
97+
sessionCreationTimes.entrySet().iterator();
98+
while (iterator.hasNext()) {
99+
Map.Entry<String, Instant> entry = iterator.next();
100+
if (entry.getValue().plusMillis(SESSION_EXPIRATION_TIME).isBefore(currentTime)) {
101+
LOGGER.info("User " + entry.getValue() + " removed");
102+
sessions.remove(entry.getKey());
103+
iterator.remove();
114104
}
115-
LOGGER.info("Session expiration checker finished!");
116-
} catch (InterruptedException e) {
117-
LOGGER.error("An error occurred: ", e);
118-
Thread.currentThread().interrupt();
119105
}
120106
}
121-
});
122-
sessionExpirationThread.start();
123-
}
124-
125-
/**
126-
* allows sessionExpirationTask to run again, called when a login request is sent.
127-
*/
128-
public static void expirationTaskWake() {
129-
synchronized (sessionExpirationWait) {
130-
sessionExpirationWait.notifyAll();
131107
}
132-
}
133-
134-
public static Thread.State getExpirationTaskState() {
135-
return sessionExpirationThread.getState();
108+
LOGGER.info("Session expiration checker finished!");
136109
}
137110

138111
}

server-session/src/main/java/com/iluwatar/sessionserver/LoginHandler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ public void handle(HttpExchange exchange) {
6363

6464
// Set session ID as cookie
6565
exchange.getResponseHeaders().add("Set-Cookie", "sessionID=" + sessionId);
66-
App.expirationTaskWake(); // Wake up expiration task
6766
// Send response
6867
String response = "Login successful!\n" + "Session ID: " + sessionId;
6968
try {

server-session/src/test/java/com.iluwatar.sessionserver/AppTest.java

Lines changed: 0 additions & 94 deletions
This file was deleted.

twin/src/main/java/com/iluwatar/twin/BallThread.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ public void run() {
5757
} else {
5858
twin.draw();
5959
twin.move();
60-
Thread.sleep(250);
6160
}
6261
}
6362
} catch (InterruptedException e) {

0 commit comments

Comments
 (0)