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

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:

  1. Reads assigned lines
  2. Creates Student objects
  3. 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
S
Description
No description provided
Readme
45 KiB
Languages
Java 100%