According to selenium, an implicit wait polls the DOM for a certain amount of time to see if an element shows up. My understanding is that it will poll up to a specified amount
Short answer:
implicit wait - It's global setting applicable for all elements and if element appear before specified time than script will start executing otherwise script will throw NoSuchElementException. Best way to use in setup method. Only affect By.findelement().
Thread.sleep() - It will sleep time for script, not good way to use in script as it's sleep without condition.