<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://m.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://m.tkk7.com/hankchen
    posted on 2009-12-29 20:58 hankchen 閱讀(3689) 評論(0)  編輯  收藏 所屬分類: Java基礎
    主站蜘蛛池模板: 国产精品无码一区二区三区免费| 免费无码av片在线观看| 四虎免费影院ww4164h| 亚洲成A人片在线观看WWW| 美女网站在线观看视频免费的| 亚洲欧洲久久av| 国产精品成人啪精品视频免费| 四虎影视免费永久在线观看| 人人爽人人爽人人片A免费| 免费在线看片网站| 一个人免费观看www视频| 亚洲精品久久久www| 中文在线免费观看| 亚洲第一精品在线视频| 84pao国产成视频免费播放| 亚洲中文字幕久久精品无码2021| 在线观看H网址免费入口| 亚洲一区二区三区国产精华液| 在线播放免费播放av片| 免费人成动漫在线播放r18| 亚洲成a人片在线观看久| 国产精品99爱免费视频| 亚洲天堂在线播放| 成人免费一区二区无码视频| 亚洲欧美在线x视频| 亚洲一区二区三区影院| 1000部啪啪毛片免费看| 亚洲精品无码专区在线播放| 亚洲成a人片在线播放| 久久久久国产免费| 亚洲黄页网在线观看| 亚洲成av人片在线观看天堂无码 | 永久免费无码日韩视频| 亚洲日韩中文字幕在线播放| 98精品全国免费观看视频| 亚洲av永久中文无码精品| 亚洲精品无码鲁网中文电影| 免费无码肉片在线观看| 一级特黄a大片免费| 亚洲午夜在线一区| 亚洲中文字幕无码永久在线|