Nato nel Kentucky, dopo il divorzio dei genitori cresce a Chicago nell’Illinois, dove il padre, Donald S. Shannon, insegnava alla DePaul University. Suo nonno era l’entomologo Raymond Corbett Shannon. Verso la metà degli anni novanta inizia a lavorare per il teatro, debuttando nella pièce Winterset, portata in scena all’Illinois Theatre Center. Successivamente lavora per la Steppenwolf Theatre Company. Per qualche anno si trasferisce a Londra, dove sui palcoscenici del West End lavora in varie rappresentazioni off-Broadway, come Killer Joe e Bug.
Il suo debutto al cinema avviene nel 1993 nel film Ricomincio da capo, tre anni più tardi appare in Reazione a catena. Nel corso degli anni recita in film come A morte Hollywood, Tigerland, Pearl Harbor, Vanilla Sky e 8 Mile, costruendosi una solida carriera da attore caratterista, dove ha spesso ricoperto ruoli tormentati e da disturbato.
Dopo essere apparso in film Bad Boys II e The Woodsman – Il segreto, William Friedkin gli affida la parte principale in Bug – La paranoia è contagiosa, tratto dall’omonima piéce che aveva già rappresentato a teatro, storia della follia e dell’autodistruzione di un ex marine ossessionato dagli insetti. Nel 2006 lavora per Oliver Stone in World Trade Center, mentre Curtis Hanson e Sidney Lumet gli affidano una parte rispettivamente in Le regole del gioco e Onora il padre e la madre.
Nel 2008 interpreta nuovamente un ruolo da disturbato in Revolutionary Road di Sam Mendes, ottenendo la sua prima candidatura all’Oscar, come miglior attore non protagonista. Nel 2010 prende parte alla serie televisiva della HBO Boardwalk Empire – L’impero del crimine, dove interpreta il ruolo dell’agente Nelson Van Alden. Nel 2013 recita nel reboot del franchise di Superman, intitolato L’uomo d’acciaio, dove interpreta il ruolo del villain Generale Zod.