6583799d9ee163a75df859cb035e865801d61909
WS-07 – Multithreading Basics and Hashing
Mini Student Search Engine
Goal
Create a simple student search engine that:
- Reads students from a file
- Processes data using multiple threads
- Stores students inside lists
- Supports search by ID
- Overrides
hashCode()andequals()
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
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:
id,name,major,gpa
Part 1 – Student Class
Create:
Student
Fields:
int id;
String name;
String major;
double gpa;
Override:
hashCode()
equals(Object obj)
toString()
Rules:
Students are equal if IDs are equal.
Example:
Student s1 = new Student(1001,...);
Student s2 = new Student(1001,...);
s1.equals(s2); // true
Custom hash:
return id % 97;
Do NOT use:
Objects.hash()
Part 2 – Student Loader Thread
Create:
StudentLoader extends Thread
Each thread receives part of file lines.
Example:
Thread 1:
1001
1002
Thread 2:
1003
1004
Thread 3:
1005
Each thread:
- Reads assigned lines
- Creates Student objects
- Stores them in its own list
Example:
Thread1 → listA
Thread2 → listB
Thread3 → listC
No shared list.
Do NOT use:
synchronized
Lock
Semaphore
ExecutorService
Part 3 – Merge Results
After threads finish:
thread1.join();
thread2.join();
thread3.join();
Combine results:
finalList.addAll(listA);
finalList.addAll(listB);
finalList.addAll(listC);
Required Menu
1.Load students
2.Search student
3.Remove student
4.Print students
5.Exit
Search example:
ID:1002
Found:
Student{id=1002,name=Sara}
Restrictions
Forbidden:
HashMap
HashSet
TreeMap
ConcurrentHashMap
synchronized
wait()
notify()
Lock
Semaphore
ExecutorService
Allowed:
Thread
join()
ArrayList
FileReader
BufferedReader
Languages
Java
100%