面試手撕代碼:兩個線程交替打印100以內奇數和偶數

背景介紹

前幾天小米二面的時候面試官突然讓手撕代碼,現場敲一個兩個線程交替打印奇偶數的程序。老實說自己的多線程這塊知識挺欠缺的,多次面試慢慢地搜了了解了一些理論,真到敲代碼其實還是挺無從下手的,借此機會記錄一下,解決這個小小的問題

題目

用兩個線程打印數字,一個線程打印奇數,一個線程打印偶數,直到100為止

代碼


代碼

思路概述

主要做法還是通過synchronized和object的notify和wait方法來做,首先維護一個變量作為輸出值,維護一個對象作為鎖,判斷數字是奇數時,線程t1獲得鎖,喚醒鎖,打印對應數字,完了把數字加一,再讓鎖等待。對應的數字是偶數的時候,也做對應的邏輯。eclipse跑了一下程序是可以正常打印結果的

體會閑聊

做這個題當時自己也是基本照著這個想法去做,不過沒有用到新建一個對象作為鎖獲取,數字是在循環內操作,可能寫的時候是有點bug的,包括一緊張自己把線程寫成多次start這種都有(明明前一天復習是有看到線程只能start一次的),但是好像面試官感受到了我的大概思路,主要邏輯應該也算通,加上其他問題答得還湊合,所以二面也過了。自己也是過了幾天覺得還是要把這一個做一下,網上倒是有多種多樣的做法,自己還是選擇了同一個思路的來實現。不過倒是實現的時候有些細節還是調了好一下子,包括自己原先做法為啥有些語法不通還是好好琢磨了一下。sleep和wait,一個不釋放鎖,一個會釋放鎖,這個面試官也有再問。java的多線程的相關知識還是被視為java的大基本功的,自己還是抽空再加強加強

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容