<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    經驗不在于年限,在于積累---專注互聯(lián)網(wǎng)軟件開發(fā)

    把工作當事業(yè)做,把項目當作品做!

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks

    最近看到一道面試題,比較有意思:


    有三個線程
    ID分別是ABC,請有多線編程實現(xiàn),在屏幕上循環(huán)打印10ABCABC…

    由于線程執(zhí)行的不確定性,要保證這樣有序的輸出,必須控制好多線程的同步。

    線程同步有兩種基本方法:

    (1)    synchronized

    (2)    wait,notify,notifyAll

    現(xiàn)在分別采用這兩種方法來解答這道題目。

    /**

    @author陳新漢 http://www.tkk7.com/hankchen

     * 2009-12-28 下午01:57:04

     */

    /**

     *采用多線程技術打印10“ABC”,即ABCABC...”

     * 實現(xiàn)方式(一)利用synchronized關鍵字實現(xiàn)

     */

    public class XunleiInterviewMultithread {

           /**

            * @param args

            */

           public static void main(String[] args) {

                  XunleiLock lock = new XunleiLock();

                  new Thread(new XunleiPrinter("A", lock)).start();

                  new Thread(new XunleiPrinter("B", lock)).start();

                  new Thread(new XunleiPrinter("C", lock)).start();

           }

    }

    class XunleiPrinter implements Runnable {

           private String name = "";

           private XunleiLock lock = null;

           private int count=10;

           public XunleiPrinter(String name, XunleiLock lock) {

                  this.name = name;

                  this.lock = lock;

           }

           @Override

           public void run() {

                  while(count>0) {

                         synchronized (lock) {

                                if (lock.getName().equalsIgnoreCase(this.name)) {

                                       System.out.print(name);

                                       count--;

                                       if (this.name.equals("A")) {

                                              lock.setName("B");

                                       } elseif (this.name.equals("B")) {

                                              lock.setName("C");

                                       } elseif (this.name.equals("C")) {

                                              lock.setName("A");

                                       }

                                }

                         }

                  }

           }

    }

    class XunleiLock

    {

           public String name = "A";

           public String getName() {

                  return name;

           }

           public void setName(String name) {

                  this.name = name;

           }

    }

    方法(二)線程類修改如下,其他類一樣:

    class XunleiPrinter2 implements Runnable {

           private String name = "";

           private XunleiLock lock = null;

           private int count=10;

           public XunleiPrinter2(String name, XunleiLock lock) {

                  this.name = name;

                  this.lock = lock;

           }

           @Override

           public void run() {

                  while(count>0) {

                         synchronized (lock) {

                                while(!lock.getName().equalsIgnoreCase(this.name)) {

                                       try{

                                              lock.wait();

                                       }catch(InterruptedException e){

                                              e.printStackTrace();

                                       }

                                }

                                System.out.print(name);

                                count--;

                                if (this.name.equals("A")) {

                                       lock.setName("B");

                                } elseif (this.name.equals("B")) {

                                       lock.setName("C");

                                } elseif (this.name.equals("C")) {

                                       lock.setName("A");

                                }

                                lock.notifyAll();

                         }

                  }

           }

    }

    (友情提示:本博文章歡迎轉載,但請注明出處:陳新漢,http://www.tkk7.com/hankchen
    posted on 2009-12-29 20:58 hankchen 閱讀(3689) 評論(0)  編輯  收藏 所屬分類: Java基礎
    主站蜘蛛池模板: 亚洲美女视频免费| 亚洲AV无码一区二区乱孑伦AS| 久久亚洲国产精品成人AV秋霞| 韩国免费a级作爱片无码| 亚洲国产精品无码久久久秋霞1| 99精品在线免费观看| 亚洲av鲁丝一区二区三区| 久久久精品免费视频| 亚洲AV无码成人精品区蜜桃| 免费国产在线视频| 91精品国产亚洲爽啪在线观看| 1000部禁片黄的免费看| 亚洲a∨无码男人的天堂| 最近中文字幕mv手机免费高清| 亚洲色www永久网站| 日本黄页网址在线看免费不卡| 免费精品国产自产拍观看| 成人免费观看男女羞羞视频| 亚洲天堂免费在线视频| 三年片免费高清版 | 国产婷婷高清在线观看免费 | 国产免费人成视频尤勿视频| 无码视频免费一区二三区| 中文字幕精品三区无码亚洲| 24小时免费直播在线观看| 超清首页国产亚洲丝袜| 中文字幕久精品免费视频| 亚洲第一区视频在线观看| 好吊妞788免费视频播放| 免费一区二区三区在线视频| 久久精品亚洲中文字幕无码网站| 亚洲黄色免费电影| 欧洲亚洲国产精华液| 全免费a级毛片免费**视频 | 久久国产精品免费观看| 亚洲国产夜色在线观看| 四虎影视精品永久免费网站| 青青操免费在线观看| 久久精品国产亚洲AV久| 亚洲精品国产自在久久| 美丽的姑娘免费观看在线播放 |