# Java Thread
### Concurrency
- Concurrency
- Logical
- Single Core / Multi Core
- Parallel
- Physical
- Multi Core
*Since Java runs on the **JVM (Java Virtual Machine)**, you don't need to worry about the physical aspects!*
### What is a Java Thread?
- `Process`
: A program that operates independently (Eclipse, Messenger, etc)
- `Thread`
: A small unit of execution that constitutes a Process (Messenger = chat + file transfer)
- `Multi-process`
: Running multiple processes simultaneously
- `Multi-thread`
: Multiple threads operating simultaneously within a single process
### Creating a Java Thread
#### Method 1) Implementing the Runnable interface
- Runnable interface
ex)
```java
package virus;
public class CoronaRunnable implements Runnable{
int num;
public CoronaRunnable() {}
public CoronaRunnable(int num) {
this.num = num;
}
@Override
public void run() {
for (int i =0 ; i< 10000 ; i++) {
int j = i*100;
}
System.out.println(num);
}
}
```
- Test
```java
package app;
import virus.CoronaRunnable;
public class CoronaThreadTest {
public static void main(String[] args) {
for (int i = 0 ; i <1000 ; i++) {
CoronaRunnable cr = new CoronaRunnable(i);
Thread t = new Thread(cr);
// Start the Thread
t.start();
}
}
}
```
#### Method 2) Extending the Thread class
- Thread class
ex)
```java
package virus;
public class CoronaThread extends Thread{
int num;
public CoronaThread() {}
public CoronaThread(int num) {
this.num = num;
}
@Override
public void run() {
for (int i = 0 ; i < 10000 ; i++) {
int j = i*100;
}
System.out.println(num);
}
}
```
- Test
```java
import virus.CoronaRunnable;
import virus.CoronaThread;
public class CoronaThreadTest {
public static void main(String[] args) {
for (int i = 0 ; i <1000 ; i++) {
CoronaThread ct = new CoronaThread(i);
ct.start();
}
}
}
```
### Memory Structure When Running a Thread
