Java synchronization task
Yes but...

The synchronization goes against the same bus, that means that every thread in the JVM must wait for other threads who are in the synchronization-block for this bus-instance.

You solved the problem but it realy needs a review: 


The prof asked you to use a API. Even if there really is an API you did not named it. The prof must have a solid and clean evidence that you know what exactly an API is.
A seat is not a boolean, the state of a seat can be an boolean. Please wrap the boolean in a class named "Seat".
A passenger neither inherits an Thread nor is to Book a seat the only work a passenger will have. If a Passenger like to book two seats, one for himself and one for his stuff. From documentation of thread this is not possible because: It is never legal to start a thread more than once. Rename the class Passenger to Booking, you can book only once but you can book for multiple persons.
As GreenNovice reason pointedly: The synchronization is not the responsibility of the Passenger, its the responsibility of the Busdriver (lets say the Bus). As GreenNovice clearly worked out, please move the synchronization into the signature of the bookSeat or into the code of bookSeat.
The synchronization works well, no need for the Thread.sleep().
The variable-name of a bus is someCompany? If i read a variable is named someCompany i like to sell all my stocks before i try to call someCompany.stop(). A better name of the variable might be someCompanysCar!


Theese are problems who must occour - because scientific programming is always collective work. No need for blame you.