‘Threading in the Gym’ project in ‘Learn Intermediate Java’ course - ADDITIONAL CHALLENGES (task 32)

The project itself:
https://www.codecademy.com/courses/learn-intermediate-java/projects/threading-in-the-gym

Can anyone describe the logic for how to deal with the additional challenge in the ‘Threading in the Gym’ project?
Should I use synchronized(), wait(), and notifyAll() (plus necessary changes to machineType/weigth-InUse states) as many times as there are different machine types and weights? Is the openForTheDay() method in Gym.java the right place to include all those limitations and dependency?

And one other question.
I’ve tried to follow all instructions quite exactly, but there is something wrong (?) with the output I get when gym members finish they work. It looks ok up to the moment when only 4 out of 5 are still exercising. The staff informs me about members that theoretically are done (these threads are no longer alive), but… they are still working like the Member1 in example given below. Any idea why?


Gym Staff - 2 people are working currently: [Thread-0, Thread-4]

Gym Member 1 performing exercise: Lat Pull Downs with 110 lbs of total weight consisting of 3 x 5 lbs weights, 2 x 10 lbs weights, 3 x 25 lbs weights.

Is it like that because the numbering of threads is different from the numbering of gym members (their id-s)?

Thanks in advance!!

It looks like Codecademy didn’t keep my code saved for this project, so I can’t remember enough to answer specifically, but the project that’s about baking a cake (or something) basically walks you through how to do the same thing. So you could always go do that one and come back to the gym one. Just a thought.

I am looking for the answer to first part as well. I am confused where I should use synchronised(this) in the code. If anyone can find the answer, it will be appreciated.