<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://www.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://www.tkk7.com/hankchen
    posted on 2009-12-29 20:58 hankchen 閱讀(3689) 評論(0)  編輯  收藏 所屬分類: Java基礎
    主站蜘蛛池模板: 性无码免费一区二区三区在线| 久久无码av亚洲精品色午夜| 国产一级淫片免费播放| 日本高清免费不卡视频| 亚洲人成片在线观看| 一级做a爰片久久毛片免费陪 | 亚洲首页在线观看| 午夜精品免费在线观看| 亚洲影院在线观看| 一本天堂ⅴ无码亚洲道久久| 黄瓜视频影院在线观看免费| 亚洲人成色7777在线观看不卡| 亚洲日本乱码一区二区在线二产线 | 亚洲一区二区三区高清视频| 1000部拍拍拍18免费网站| 国产成人高清亚洲| 亚洲人成网站免费播放| 最新69国产成人精品免费视频动漫| 亚洲综合国产精品第一页| 91视频免费观看高清观看完整| 亚洲成AV人片在线播放无码| 另类图片亚洲校园小说区| 免费观看美女用震蛋喷水的视频| 91嫩草亚洲精品| 国产zzjjzzjj视频全免费| 成人嫩草影院免费观看| 亚洲国产精品国自产拍AV| 成人免费视频77777| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 免费av片在线观看网站| 久久亚洲AV无码精品色午夜麻豆| 在线观看免费人成视频色9| 亚洲成AV人片在WWW| 一个人看的www在线观看免费| 久久人午夜亚洲精品无码区| 亚洲线精品一区二区三区| 日本最新免费网站| 亚洲av成人中文无码专区| 亚洲成av人片在线观看无码不卡| 一二三四视频在线观看中文版免费| 在线播放免费人成视频网站|