多線程學(xué)習(xí):多線程習(xí)題(四)

代碼都已上傳github

P04 有四個線程1赛惩、2、3趁餐、4喷兼。線程1的功能就是輸出A,線程2的功能就是輸出B后雷,以此類推

現(xiàn)在有四個文件file1,file2,file3, file4季惯。初始都為空。
現(xiàn)要讓四個文件呈如下格式:
file1:A B C D A B....
file2:B C D A B C....
file3:C D A B C D....
file4:D A B C D A....

心得

  • 雖然是4個線程臀突,但是還是不能做到對4個文件同時進行讀寫勉抓。感覺以后可以繼續(xù)優(yōu)化
  • 在對同步局域用Lock 上鎖的時候會出現(xiàn)java.lang.IllegalMonitorStateException 的問題,網(wǎng)上查了一下候学。有一個說法是

在對某個對象上調(diào)用wait()方法進行線程等待(讓其他競爭執(zhí)行該代碼的線程上鎖)時藕筋,沒有對該對象執(zhí)行同步操作。
所以解決方法是:

synchronized (xxxx)  {
     xxxx.wait();
   }

代碼

核心代碼

  //確定第幾個線程可以輸出
    //如果換了輸出文本梳码,那么就要限制第一個輸出的線程
    public static void changeThread(){
        if (count % 8 == 0) {
            ThreadNumber =FileNumber +2;
            if(ThreadNumber>=4){
                ThreadNumber = 4;
            }
        }
    }

    //變更輸出文本 當(dāng)一個文本寫入8個的時候就進行切換文本
    public static void changeFile() {
        if(count %8 ==0){
            FileNumber++;
            if(FileNumber>=4){
                FileNumber = 3;
            }
        }

    }

    public static void out(char a) {

        synchronized (lock) {

            Integer integer = Integer.valueOf(Thread.currentThread().getName());

            while (integer != ThreadNumber) {
                try {

                    lock.wait();

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            changeFile();
            try {
                FileWriter fileWriter = new FileWriter(files[FileNumber], true);
                System.out.println("將要寫入字符 " + a);
                fileWriter.write(a);
                fileWriter.flush();
                fileWriter.close();
                count++;
                //改變線程
                if (integer % 4 == 0) {
                    ThreadNumber = 1;
                } else {
                    ThreadNumber++;
                }
                changeThread();
                lock.notifyAll();
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隐圾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掰茶,更是在濱河造成了極大的恐慌暇藏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件濒蒋,死亡現(xiàn)場離奇詭異叨咖,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門甸各,熙熙樓的掌柜王于貴愁眉苦臉地迎上來垛贤,“玉大人,你說我怎么就攤上這事趣倾∑傅耄” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵儒恋,是天一觀的道長善绎。 經(jīng)常有香客問我,道長诫尽,這世上最難降的妖魔是什么禀酱? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮牧嫉,結(jié)果婚禮上剂跟,老公的妹妹穿的比我還像新娘。我一直安慰自己酣藻,他們只是感情好曹洽,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辽剧,像睡著了一般送淆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怕轿,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天偷崩,我揣著相機與錄音,去河邊找鬼撞羽。 笑死阐斜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的放吩。 我是一名探鬼主播智听,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼羽杰,長吁一口氣:“原來是場噩夢啊……” “哼渡紫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起考赛,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤惕澎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颜骤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唧喉,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了八孝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片董朝。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖干跛,靈堂內(nèi)的尸體忽然破棺而出子姜,到底是詐尸還是另有隱情,我是刑警寧澤楼入,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布哥捕,位于F島的核電站,受9級特大地震影響嘉熊,放射性物質(zhì)發(fā)生泄漏遥赚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一阐肤、第九天 我趴在偏房一處隱蔽的房頂上張望凫佛。 院中可真熱鬧,春花似錦泽腮、人聲如沸御蒲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厚满。三九已至,卻和暖如春碧磅,著一層夾襖步出監(jiān)牢的瞬間碘箍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工鲸郊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丰榴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓秆撮,卻偏偏與公主長得像四濒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子职辨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348