用兩個(gè)線程珍语,一個(gè)輸出字母锤岸,一個(gè)輸出數(shù)字,交替輸出1A2B3C4D...26Z

用兩個(gè)線程板乙,一個(gè)輸出字母是偷,一個(gè)輸出數(shù)字,交替輸出1A2B3C4D...26Z

方法一

public class Test {
    static Thread t1 = null, t2 = null;

    public static void main(String[] args) {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aI) {
                    System.out.print(c);
                    LockSupport.unpark(t2);
                    LockSupport.park();
                }

            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aC) {
                    LockSupport.park();
                    System.out.print(c);
                    LockSupport.unpark(t1);
                }
            }
        });
        t1.start();
        t2.start();
    }

}

方法二

public class Test2 {
    static Thread t1 = null, t2 = null;

    enum ReadyToRun {T1, T2}

    static ReadyToRun r = T1;

    public static void main(String[] args) {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aI) {
                    while (r != T1) {
                    }
                    System.out.print(c);
                    r = T2;
                }

            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aC) {
                    while (r != T2) {
                    }
                    System.out.print(c);
                    r = T1;
                }


            }
        });
        t1.start();
        t2.start();
    }

}

方法三

public class Test3 {
    static Thread t1 = null, t2 = null;

    static AtomicInteger a = new AtomicInteger(1);

    public static void main(String[] args) {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aI) {
                    while (a.get() != 1) {
                    }
                    System.out.print(c);
                    a.set(2);
                }

            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aC) {
                    while (a.get() != 2) {
                    }
                    System.out.print(c);
                    a.set(1);
                }


            }
        });
        t1.start();
        t2.start();
    }

}

方法四

public class Test4 {
    //隊(duì)列阻塞特性
    static Thread t1 = null, t2 = null;
    static BlockingQueue<String> bq1 = new ArrayBlockingQueue<>(1);
    static BlockingQueue<String> bq2 = new ArrayBlockingQueue<>(1);

    public static void main(String[] args) {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aI) {
                    System.out.print(c);
                    try {
                        bq1.put("ok");
                        bq2.take();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }

            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aC) {
                    try {
                        bq1.take();
                        System.out.print(c);
                        bq2.put("ok");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        });
        t2.start();
        t1.start();
    }
}

方法五

public class Test5 {
    static Thread t1 = null, t2 = null;
    static CountDownLatch latch = new CountDownLatch(1);

    public static void main(String[] args) {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();
        final Object o = new Object();
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (o) {
                    for (char c : aI) {
                        System.out.print(c);
                         latch.countDown();
                        try {
                            o.notify();
                            o.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }
                    o.notify();
                }


            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (o) {
                    for (char c : aC) {
                        System.out.print(c);
                        try {
                            o.notify();
                            o.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    o.notify();
                }
            }
        });
        t1.start();
        t2.start();
    }

}

方法六

public class Test6 {
    static Thread t1 = null, t2 = null;

    public static void main(String[] args) {
        char[] aI = "1234567".toCharArray();
        char[] aC = "ABCDEFG".toCharArray();
        Lock lock = new ReentrantLock();
        //一把鎖兩種條件
        Condition conditionT1 = lock.newCondition();
        Condition conditionT2 = lock.newCondition();
        CountDownLatch latch = new CountDownLatch(1);
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    lock.lock();
                    for (char c : aI) {
                        System.out.print(c);
                        latch.countDown();
                        conditionT2.signal();
                        conditionT1.await();
                    }
                    conditionT2.signal();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    lock.unlock();
                }
            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    latch.await();
                    lock.lock();
                    for (char c : aC) {
                        System.out.print(c);
                        conditionT1.signal();
                        conditionT2.await();
                    }
                    conditionT1.signal();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    lock.unlock();
                }

            }
        });
        t1.start();
        t2.start();

    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末募逞,一起剝皮案震驚了整個(gè)濱河市蛋铆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌放接,老刑警劉巖刺啦,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異透乾,居然都是意外死亡洪燥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)乳乌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捧韵,“玉大人,你說(shuō)我怎么就攤上這事汉操≡倮矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵磷瘤,是天一觀的道長(zhǎng)芒篷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)采缚,這世上最難降的妖魔是什么针炉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮扳抽,結(jié)果婚禮上篡帕,老公的妹妹穿的比我還像新娘。我一直安慰自己贸呢,他們只是感情好镰烧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著楞陷,像睡著了一般怔鳖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上固蛾,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天结执,我揣著相機(jī)與錄音,去河邊找鬼魏铅。 笑死昌犹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的览芳。 我是一名探鬼主播斜姥,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沧竟!你這毒婦竟也來(lái)了铸敏?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悟泵,失蹤者是張志新(化名)和其女友劉穎杈笔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體糕非,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒙具,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年球榆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禁筏。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡持钉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篱昔,到底是詐尸還是另有隱情每强,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布州刽,位于F島的核電站空执,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏穗椅。R本人自食惡果不足惜辨绊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匹表。 院中可真熱鬧邢羔,春花似錦、人聲如沸桑孩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)流椒。三九已至敏簿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宣虾,已是汗流浹背惯裕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绣硝,地道東北人蜻势。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鹉胖,于是被迫代替她去往敵國(guó)和親握玛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345