The 28-year-old, who was fourth in Tokyo three years ago, finished 11 points clear of Portugal's Iuri Leitao with Belgium's Fabio van den Bossche taking bronze.
The omnium is made up of four different endurance races –- the scratch, tempo, elimination and points -- with riders scoring points in each for an overall total.
Thomas led a pack of five that pulled away with 15 laps left in the opening 10km scratch race, finishing strongly to take the maximum 40 points ahead of Denmark's Niklas Larsen.
But it was Van den Bossche who seized the initiative in the tempo, finishing first to open an overall eight-point lead from Larsen and 10 clear of Leitao.
Van den Bossche came sixth in an elimination race won by Britain's Ethan Hayter, but still took a 16-point advantage into the final 100-lap race from Thomas.
However, the Frenchman clawed back into the lead by winning a series of mid-race sprints before coming off his bike with 24 laps to go. Undeterred, he stormed back to take gold.
Requiring strength, pace, and tactical ability, the omnium was introduced to the Olympics at London in 2012.