<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网址在线观看| 日本成人在线免费观看| 99久久免费精品国产72精品九九| 人与禽交免费网站视频| 久久久久久精品免费免费自慰| 99re6热视频精品免费观看| 久久久久久毛片免费播放| 外国成人网在线观看免费视频| 久久国产精品萌白酱免费| 18女人毛片水真多免费| 国产99视频精品免费观看7| 青苹果乐园免费高清在线| 成人免费无码大片a毛片| 成人免费无码精品国产电影| 国产真实伦在线视频免费观看| 免费人妻无码不卡中文字幕18禁| 一本色道久久88亚洲综合 | sss在线观看免费高清| 精品人妻系列无码人妻免费视频| 伊人久久大香线蕉免费视频| 精品视频在线免费观看| 久久国产乱子伦免费精品| 午夜国产精品免费观看| 日本免费一区二区三区最新vr| 亚洲不卡无码av中文字幕| 精品亚洲永久免费精品| 亚洲视频中文字幕在线| 亚洲中文字幕乱码AV波多JI| 边摸边脱吃奶边高潮视频免费| 一个人免费播放在线视频看片| 人妻在线日韩免费视频| 国产精品成人免费福利| 欧洲精品免费一区二区三区| 亚洲免费视频一区二区三区| 亚洲AV综合色一区二区三区| 亚洲一区中文字幕在线观看| 看免费毛片天天看| 国产好大好硬好爽免费不卡| 成年人免费观看视频网站| 亚洲成a人片在线观看老师|