公元291年,惠帝司馬衷的皇后賈南風和楚王司馬瑋合謀,殺掉了當時掌權的楊駿。楊駿是楊太后的哥哥,非常受武帝司馬炎的信任,在武帝后期便主持了國家大事,和兩個弟弟楊珧楊濟一起,被稱爲“三楊”,惠帝繼位後,楊駿以太尉的身份主理軍國大事,大權獨攬,司馬氏皇族和皇后賈南風都非常反感,賈南風突然襲擊,說楊駿謀反,把“三楊”和他們的全家抓起來殺掉,把楊太后關進冷宮餓死。任用汝南王司馬亮和太保衛萁管理政事,又讓殺楊駿有功的楚王司馬瑋管禁軍,司馬瑋目中無人,橫行霸道,聽說衛萁要奪自己的兵權,便和賈南風合計,說汝南司馬亮和衛萁合謀造反,殺了司馬亮和衛萁,朝中權力全歸賈南風掌握。
賈南風雖然是皇后,可她沒有孩子,當時的太子不是自己生的,把太子先廢掉後又殺死,趙王司馬倫乘機和樑王司馬肜發動兵變,把賈南風捉了起來,廢掉了她的皇后位置。
趙王司馬倫是個很有心計的人,他先前總是拍賈南風的馬屁,取得了賈南風的信任,別人都認爲他是賈氏的死黨,實際上他是個野心很大的人,當賈南風廢殺太子時,他默不作聲,等太子被殺死,他突然起兵,廢除賈后,自封爲相國。在公元301年,又廢除惠帝司馬衷,自己當了皇帝。
司馬倫廢了惠帝,自己當皇帝,引起了分封在各地的王侯的極大不滿,鎮東大將軍司馬苶首先領兵舉事,要討伐司馬倫,恢復晉惠帝的位置,他通知成都王司馬穎,河間王司馬顒一同起兵,司馬倫也通知河間王司馬顒(yóng)就地討伐司馬苶,司馬顒見司馬苶和司馬穎的勢力強大,便幫助司馬苶而不幫司馬倫。三個王侯的大兵打進京城,殺掉了司馬倫和他的親信孫秀,將惠帝司馬衷接進都城,恢復了皇帝位。
司馬苶恢復了司馬衷的帝位,立了大功,在朝中掌管大權,而司馬顒卻沒得到多少好處,便聯合長沙王司馬乂,發兵討伐司馬東,司馬顒認爲,司馬乂的力量比不上司馬苶,肯定會被司馬苶打敗,然後自己再打敗司馬苶,最後再廢掉惠帝,換一個皇帝,自己來當宰相。哪知道如意算盤打得好,卻落了個空,司馬乂發兵成功,司馬苶被殺,惠帝因爲司馬乂有功,任命司馬乂爲太尉,總管軍政大事,掌握了實權。司馬顒卻一無所得,便再次聯合成都王司馬穎共同攻擊司馬乂,可是接連打了幾仗,司馬穎連連失敗,司馬顒準備退軍算了,卻突然傳來好消息,東海王司馬越和禁軍將領朱默合謀,夜中捉住了司馬乂,用火燒死。成都王司馬穎被任爲丞相,住在鄴城,遙控朝政。司馬顒被任爲太宰,居住在長安。
公元304年,東海王司馬越不滿司馬穎獨掌大權,以皇帝的名義,發兵攻擊司馬穎,結果連敗幾次,只得逃回自己的封地去了,司馬穎便把惠帝劫持到鄴城,由自己控制起來。
當皇帝被劫持到鄴城的時候,司馬顒的大將張方乘虛佔據了洛陽。不久,安北將軍王浚和司馬越的弟弟司馬騰聯合起來進攻司馬穎,司馬穎大敗,帶着晉惠帝司馬衷一道逃到洛陽。洛陽守將張方又逼惠帝和司馬穎遷居長安,接受司馬顒的管轄,司馬顒削掉了司馬穎的官職,自己以太宰的身份主管全事。
公元305年,東海王司馬越再次發兵進攻司馬顒,這時候,司馬穎的部下將軍汲桑等人攻下了鄴城,將司馬穎接回鄴城。司馬顒抵不住許多諸侯的進攻,丟下晉惠帝獨自逃跑,晉惠帝這才被司馬越再一次接回洛陽,仍然當他的皇帝。惠帝任司馬越爲太傅,總管大權。司馬越派人找到司馬顒,請他回朝,讓他當司空,司馬顒信以爲真,在回洛陽的途中不明不白地被人殺死。
司馬越掌權以後,不滿意司馬衷,便將司馬衷毒死,然後立司馬炎的第二十五個兒子司馬熾爲皇帝,這就是晉懷帝,到這時候,“八王之亂”宣告結束。
所謂“八王之亂”,指的就是從公元303年到305年這一段時間內,諸侯王互相攻殺的事件,這八個王是:汝南王司馬亮、楚王司馬瑋、齊王司馬苶、趙王司馬倫、長沙王司馬乂,河間王司馬顒,東海王司馬越、成都王司馬穎。實際上,參加“八王之亂”的諸侯王不止八個,《晉書》將這八個人合爲一篇傳記,統稱八王,後代將這一事件通稱爲“八王之亂”。