背景介紹
前幾天小米二面的時候面試官突然讓手撕代碼,現場敲一個兩個線程交替打印奇偶數的程序。老實說自己的多線程這塊知識挺欠缺的,多次面試慢慢地搜了了解了一些理論,真到敲代碼其實還是挺無從下手的,借此機會記錄一下,解決這個小小的問題
題目
用兩個線程打印數字,一個線程打印奇數,一個線程打印偶數,直到100為止
代碼
代碼
思路概述
主要做法還是通過synchronized和object的notify和wait方法來做,首先維護一個變量作為輸出值,維護一個對象作為鎖,判斷數字是奇數時,線程t1獲得鎖,喚醒鎖,打印對應數字,完了把數字加一,再讓鎖等待。對應的數字是偶數的時候,也做對應的邏輯。eclipse跑了一下程序是可以正常打印結果的
體會閑聊
做這個題當時自己也是基本照著這個想法去做,不過沒有用到新建一個對象作為鎖獲取,數字是在循環內操作,可能寫的時候是有點bug的,包括一緊張自己把線程寫成多次start這種都有(明明前一天復習是有看到線程只能start一次的),但是好像面試官感受到了我的大概思路,主要邏輯應該也算通,加上其他問題答得還湊合,所以二面也過了。自己也是過了幾天覺得還是要把這一個做一下,網上倒是有多種多樣的做法,自己還是選擇了同一個思路的來實現。不過倒是實現的時候有些細節還是調了好一下子,包括自己原先做法為啥有些語法不通還是好好琢磨了一下。sleep和wait,一個不釋放鎖,一個會釋放鎖,這個面試官也有再問。java的多線程的相關知識還是被視為java的大基本功的,自己還是抽空再加強加強