docs: Add detailed documentation for multithreading and hashing workshop
This commit is contained in:
@@ -1,2 +1,256 @@
|
||||
# WS-07-Multithreading-Basics-and-Hashing
|
||||
# WS-07 – Multithreading Basics and Hashing
|
||||
|
||||
---
|
||||
|
||||
## Mini Student Search Engine
|
||||
|
||||
### Goal
|
||||
|
||||
Create a simple student search engine that:
|
||||
|
||||
1. Reads students from a file
|
||||
2. Processes data using multiple threads
|
||||
3. Stores students inside lists
|
||||
4. Supports search by ID
|
||||
5. Overrides `hashCode()` and `equals()`
|
||||
|
||||
---
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
WS-07-Multithreading-Basics-and-Hashing/
|
||||
│
|
||||
├── students.txt
|
||||
│
|
||||
├── src/main/java/dev/
|
||||
│ │
|
||||
│ ├── Main.java
|
||||
│ │
|
||||
│ ├── model/
|
||||
│ │ └── Student.java
|
||||
│ │
|
||||
│ ├── thread/
|
||||
│ │ └── StudentLoader.java
|
||||
│ │
|
||||
│ ├── service/
|
||||
│ │ └── StudentManager.java
|
||||
│ │
|
||||
│ └── utils/
|
||||
│ └── FileManager.java
|
||||
│
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Input File
|
||||
|
||||
`students.txt`
|
||||
|
||||
```txt
|
||||
1001,Ali,Computer Science,3.7
|
||||
1002,Sara,Physics,3.9
|
||||
1003,John,Mathematics,3.5
|
||||
1004,Alice,Chemistry,3.2
|
||||
1005,David,Computer Science,3.8
|
||||
```
|
||||
|
||||
Format:
|
||||
|
||||
```txt
|
||||
id,name,major,gpa
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Part 1 – Student Class
|
||||
|
||||
Create:
|
||||
|
||||
```java
|
||||
Student
|
||||
```
|
||||
|
||||
Fields:
|
||||
|
||||
```java
|
||||
int id;
|
||||
String name;
|
||||
String major;
|
||||
double gpa;
|
||||
```
|
||||
|
||||
Override:
|
||||
|
||||
```java
|
||||
hashCode()
|
||||
|
||||
equals(Object obj)
|
||||
|
||||
toString()
|
||||
```
|
||||
|
||||
Rules:
|
||||
|
||||
Students are equal if IDs are equal.
|
||||
|
||||
Example:
|
||||
|
||||
```java
|
||||
Student s1 = new Student(1001,...);
|
||||
Student s2 = new Student(1001,...);
|
||||
|
||||
s1.equals(s2); // true
|
||||
```
|
||||
|
||||
Custom hash:
|
||||
|
||||
```java
|
||||
return id % 97;
|
||||
```
|
||||
|
||||
Do NOT use:
|
||||
|
||||
```java
|
||||
Objects.hash()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Part 2 – Student Loader Thread
|
||||
|
||||
Create:
|
||||
|
||||
```java
|
||||
StudentLoader extends Thread
|
||||
```
|
||||
|
||||
Each thread receives part of file lines.
|
||||
|
||||
Example:
|
||||
|
||||
Thread 1:
|
||||
|
||||
```txt
|
||||
1001
|
||||
1002
|
||||
```
|
||||
|
||||
Thread 2:
|
||||
|
||||
```txt
|
||||
1003
|
||||
1004
|
||||
```
|
||||
|
||||
Thread 3:
|
||||
|
||||
```txt
|
||||
1005
|
||||
```
|
||||
|
||||
Each thread:
|
||||
|
||||
1. Reads assigned lines
|
||||
2. Creates Student objects
|
||||
3. Stores them in its own list
|
||||
|
||||
Example:
|
||||
|
||||
```java
|
||||
Thread1 → listA
|
||||
|
||||
Thread2 → listB
|
||||
|
||||
Thread3 → listC
|
||||
```
|
||||
|
||||
No shared list.
|
||||
|
||||
Do NOT use:
|
||||
|
||||
```java
|
||||
synchronized
|
||||
Lock
|
||||
Semaphore
|
||||
ExecutorService
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Part 3 – Merge Results
|
||||
|
||||
After threads finish:
|
||||
|
||||
```java
|
||||
thread1.join();
|
||||
thread2.join();
|
||||
thread3.join();
|
||||
```
|
||||
|
||||
Combine results:
|
||||
|
||||
```java
|
||||
finalList.addAll(listA);
|
||||
|
||||
finalList.addAll(listB);
|
||||
|
||||
finalList.addAll(listC);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Required Menu
|
||||
|
||||
```txt
|
||||
1.Load students
|
||||
2.Search student
|
||||
3.Remove student
|
||||
4.Print students
|
||||
5.Exit
|
||||
```
|
||||
|
||||
Search example:
|
||||
|
||||
```txt
|
||||
ID:1002
|
||||
|
||||
Found:
|
||||
|
||||
Student{id=1002,name=Sara}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Restrictions
|
||||
|
||||
Forbidden:
|
||||
|
||||
```java
|
||||
HashMap
|
||||
HashSet
|
||||
TreeMap
|
||||
ConcurrentHashMap
|
||||
|
||||
synchronized
|
||||
wait()
|
||||
notify()
|
||||
|
||||
Lock
|
||||
Semaphore
|
||||
|
||||
ExecutorService
|
||||
```
|
||||
|
||||
Allowed:
|
||||
|
||||
```java
|
||||
Thread
|
||||
join()
|
||||
|
||||
ArrayList
|
||||
|
||||
FileReader
|
||||
BufferedReader
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user