Add multithreading module: odd-even, ping-pong, ordered threads, deadlock detection and fixes, virtual-thread variants (25 tests)
Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_017ic4b7rnC7jppGGdHGESvy
This commit is contained in:
Executable
+21
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
# Regenerates every transcript in output/. Needs JDK 25 and Maven 3.9+.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
mkdir -p output
|
||||
./scripts/run.sh odd-even > output/01-odd-even.txt
|
||||
./scripts/run.sh ping-pong > output/02-ping-pong.txt
|
||||
./scripts/run.sh ordered > output/03-ordered-threads.txt
|
||||
./scripts/run.sh deadlock > output/04-deadlock.txt
|
||||
./scripts/run.sh virtual > output/05-virtual-single-carrier.txt
|
||||
mvn -B -q test > /dev/null 2>&1
|
||||
python3 - <<'PY' > output/06-test-results.txt
|
||||
import glob, xml.etree.ElementTree as ET
|
||||
total = fail = 0
|
||||
for f in sorted(glob.glob("target/surefire-reports/TEST-*.xml")):
|
||||
for tc in ET.parse(f).getroot().iter("testcase"):
|
||||
bad = tc.find("failure") is not None or tc.find("error") is not None
|
||||
total += 1; fail += bad
|
||||
print(("FAIL " if bad else "PASS ") + tc.get("classname").split(".")[-1] + "." + tc.get("name"))
|
||||
print(f"{total} tests, {fail} failures")
|
||||
PY
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
# Runs one demo: ./scripts/run.sh odd-even | ping-pong | ordered | deadlock | virtual
|
||||
# Needs JDK 25 and Maven (Maven only to compile). The "virtual" demo is started with ONE carrier thread.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
mvn -B -q compile 2>&1 | grep -E 'ERROR' || true
|
||||
FLAGS=(-Xmx256m)
|
||||
if [ "${1:-}" = "virtual" ]; then
|
||||
FLAGS+=(-Djdk.virtualThreadScheduler.parallelism=1 -Djdk.virtualThreadScheduler.maxPoolSize=1)
|
||||
fi
|
||||
java "${FLAGS[@]}" -cp target/classes com.ankurm.interviewlab.multithreading.Demo "$1" 2>&1 | grep -v '^Picked up JAVA_TOOL_OPTIONS'
|
||||
Reference in New Issue
Block a user