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

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

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

    經驗不在于年限,在于積累---專注互聯網軟件開發

    把工作當事業做,把項目當作品做!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks

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


    有三個線程
    ID分別是ABC,請有多線編程實現,在屏幕上循環打印10ABCABC…

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

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

    (1)    synchronized

    (2)    wait,notify,notifyAll

    現在分別采用這兩種方法來解答這道題目。

    /**

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

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

     */

    /**

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

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

     */

    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基礎
    主站蜘蛛池模板: 18亚洲男同志videos网站| 亚洲欧洲日产国产最新| 四虎影视成人永久免费观看视频| 亚洲av色福利天堂| 99视频在线精品免费观看6| 精品在线免费视频| 老司机亚洲精品影院无码| 热99re久久精品精品免费| 伊人久久大香线蕉免费视频| 78成人精品电影在线播放日韩精品电影一区亚洲 | 麻豆成人精品国产免费| jzzjzz免费观看大片免费| 亚洲精品白色在线发布| yy6080久久亚洲精品| 13一14周岁毛片免费| 美女被爆羞羞网站在免费观看| 亚洲欧洲日产国码久在线观看| 日韩一品在线播放视频一品免费| 你是我的城池营垒免费观看完整版| 亚洲免费观看网站| 国产AV无码专区亚洲AV漫画 | 羞羞视频网站免费入口| 亚洲高清在线视频| 国产免费无遮挡精品视频| 1000部禁片黄的免费看| h在线看免费视频网站男男| 亚洲一区二区久久| 亚洲AV无码乱码在线观看裸奔| 无码国产亚洲日韩国精品视频一区二区三区 | 三级网站免费观看| 国产精品自拍亚洲| 亚洲人成电影青青在线播放| 亚洲国产日韩在线视频| 免费一级毛片在线播放不收费| 国产国产人免费视频成69堂| 两个人看www免费视频| 美女视频黄频a免费大全视频| 亚洲av无码国产综合专区| 亚洲Av熟妇高潮30p| 不卡一卡二卡三亚洲| 免费日本黄色网址|