diff --git a/study-thread-programming/.classpath b/study-thread-programming/.classpath
new file mode 100644
index 0000000..57bca72
--- /dev/null
+++ b/study-thread-programming/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/study-thread-programming/.project b/study-thread-programming/.project
new file mode 100644
index 0000000..b3577ce
--- /dev/null
+++ b/study-thread-programming/.project
@@ -0,0 +1,17 @@
+
+
+ study-thread-programming
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/study-thread-programming/.settings/org.eclipse.core.resources.prefs b/study-thread-programming/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/study-thread-programming/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/study-thread-programming/.settings/org.eclipse.jdt.core.prefs b/study-thread-programming/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8c9943d
--- /dev/null
+++ b/study-thread-programming/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/study-thread-programming/src/com/example/Exercise01.java b/study-thread-programming/src/com/example/Exercise01.java
new file mode 100644
index 0000000..6c78250
--- /dev/null
+++ b/study-thread-programming/src/com/example/Exercise01.java
@@ -0,0 +1,40 @@
+package com.example;
+
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+// Thread: i) Multi-tasking
+// ii) Multi-core -> Parallel Programming
+public class Exercise01 {
+
+ public static void main(String[] args) throws InterruptedException {
+ System.out.println("Application is just started.");
+ var task1 = new LotteryTask();
+ var task2 = new LotteryTask();
+ var t1 = new Thread(task1); // Platform (OS) manages -> Kernel-level Thread
+ var t2 = new Thread(task2);
+ t1.start();
+ t2.start();
+ t1.join();
+ System.out.println(task1.getNumbers());
+ t2.join();
+ System.out.println(task2.getNumbers());
+ System.out.println("Application is done.");
+ }
+
+}
+
+class LotteryTask implements Runnable {
+
+ private List numbers;
+
+ @Override
+ public void run() {
+ numbers = ThreadLocalRandom.current().ints(1, 60).distinct().limit(6).sorted().boxed().toList();
+ }
+
+ public List getNumbers() {
+ return numbers;
+ }
+
+}