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

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

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

    weidagang2046的專欄

    物格而后知致
    隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
    數據加載中……

    多線程文件拷貝

    要求:線程1從文件f:\1.txt讀取文件,線程2通過線程1將內容保存至f:\2.txt。

    import?java.io.*;


    class?Buffer
    {
    ????
    private?char[]?contents;

    ????
    private?int?size;

    ????
    private?int?state;

    ????
    public?final?static?int?FULL?=?0;

    ????
    public?final?static?int?EMPTY?=?1;

    ????
    public?final?static?int?UNSTABLE?=?2;

    ????
    public?final?static?int?END?=?3;
    ????
    ????
    public?Buffer()
    ????{
    ????????state?
    =?EMPTY;
    ????}

    ????
    public?char[]?getContents()
    ????{
    ????????
    return?contents;
    ????}

    ????
    public?void?setContents(char[]?contents,?int?size)
    ????{
    ????????
    this.contents?=?contents;
    ????????
    this.size?=?size;
    ????}

    ????
    public?int?getSize()
    ????{
    ????????
    return?size;
    ????}

    ????
    synchronized?public?int?getState()
    ????{
    ????????
    return?state;
    ????}
    ????
    ????
    synchronized?public?void?setState(int?state)
    ????{
    ????????
    this.state?=?state;
    ????}
    }

    class?Thread1?extends?Thread
    {
    ????
    private?String?inputFile;
    ????
    private?Buffer?buffer;
    ????
    ????
    public?Thread1(String?inputFile)
    ????{
    ????????
    this.inputFile?=?inputFile;
    ????????
    this.buffer?=?new?Buffer();
    ????}

    ????
    public?void?run()
    ????{
    ????????
    try
    ????????{
    ????????????BufferedReader?in?
    =?new?BufferedReader(new?FileReader(new?File(
    ????????????????????inputFile)));
    ????????????
    int?size?=?0;
    ????????????
    while(true)
    ????????????{
    ????????????????
    char[]?contents?=?new?char[102];
    ????????????????size?
    =?in.read(contents,?0,?100);
    ????????????????
    if(size?<=?0)
    ????????????????????
    break;
    ????????????????
    synchronized(buffer)
    ????????????????{
    ????????????????????
    if(Buffer.EMPTY?!=?buffer.getState())
    ????????????????????{
    ????????????????????????buffer.wait();
    ????????????????????}
    ????????????????????System.out.println(
    "Thread1:?"?+?size);
    ????????????????????buffer.setContents(contents,?size);
    ????????????????????buffer.setState(Buffer.FULL);
    ????????????????????buffer.notify();
    ????????????????}
    ????????????}
    ????????????buffer.setState(Buffer.END);
    ????????????
    synchronized(buffer)
    ????????????{????
    ????????????????buffer.notify();
    ????????????}
    ????????????in.close();
    ????????}?
    catch?(FileNotFoundException?e)
    ????????{
    ????????????System.err.println(e.getMessage());
    ????????????e.printStackTrace();
    ????????}?
    catch?(IOException?e)
    ????????{
    ????????????System.err.println(e.getMessage());
    ????????????e.printStackTrace();
    ????????}?
    catch?(InterruptedException?e)
    ????????{
    ????????????System.err.println(e.getMessage());
    ????????????e.printStackTrace();
    ????????}
    ????}

    ????
    public?Buffer?getBuffer()
    ????{
    ????????
    return?buffer;
    ????}
    }

    class?Thread2?extends?Thread
    {
    ????
    private?String?outputFile;

    ????
    private?Buffer?buffer;
    ????
    ????
    public?Thread2(String?outputFile,?Buffer?buffer)
    ????{
    ????????
    this.outputFile?=?outputFile;
    ????????
    this.buffer?=?buffer;
    ????}

    ????
    public?void?run()
    ????{
    ????????
    try
    ????????{
    ????????????BufferedWriter?out?
    =?new?BufferedWriter(new?FileWriter(
    ????????????????????
    new?File(outputFile)));
    ????????????
    while(true)
    ????????????{
    ????????????????
    synchronized(buffer)
    ????????????????{
    ????????????????????
    int?state;
    ????????????????????
    while(Buffer.FULL?!=?(state?=?buffer.getState()))
    ????????????????????{
    ????????????????????????
    if(Buffer.END?==?state)
    ????????????????????????????
    break;
    ????????????????????????buffer.wait();
    ????????????????????}
    ????????????????????
    if(Buffer.END?==?state)
    ????????????????????????
    break;
    ????????????????????System.out.println(
    "Thread2:?"?+?buffer.getSize());
    ????????????????????out.append(
    new?String(buffer.getContents(),?0,?buffer.getSize()));
    ????????????????????buffer.setState(Buffer.EMPTY);
    ????????????????????buffer.notify();
    ????????????????}
    ????????????}
    ????????????out.close();
    ????????}?
    catch?(IOException?e)
    ????????{
    ????????????System.err.println(e.getMessage());
    ????????????e.printStackTrace();
    ????????}?
    catch?(InterruptedException?e)
    ????????{
    ????????????System.err.println(e.getMessage());
    ????????????e.printStackTrace();
    ????????}
    ????}
    }

    public?class?FileCopy
    {

    ????
    public?static?void?main(String[]?argv)
    ????{
    ????????Thread1?thread1?
    =?new?Thread1("f:\\1.txt");
    ????????Thread2?thread2?
    =?new?Thread2("f:\\2.txt",?thread1.getBuffer());
    ????????
    ????????thread1.start();
    ????????thread2.start();
    ????}
    }

    posted on 2006-06-12 22:34 weidagang2046 閱讀(871) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 日本在线看片免费人成视频1000| 最近中文字幕电影大全免费版| 久久久久久夜精品精品免费啦 | 久久久久久久久久国产精品免费| 日韩毛片免费无码无毒视频观看| 亚洲一区二区三区国产精品| 亚洲人成人77777在线播放| 日亚毛片免费乱码不卡一区 | 亚洲视频一区在线| 视频免费1区二区三区| 91香蕉成人免费网站| 久久精品国产亚洲AV不卡| 亚洲宅男精品一区在线观看| 中文字幕乱理片免费完整的| 在线观看免费a∨网站| 久久精品国产亚洲AV网站| 美女的胸又黄又www网站免费| 亚洲成人在线免费观看| 久久久青草青青国产亚洲免观 | 亚洲乱码无码永久不卡在线| 香蕉大伊亚洲人在线观看| 18禁在线无遮挡免费观看网站| 日本一道高清不卡免费| 亚洲激情视频网站| 91免费在线视频| 国产片免费在线观看| 亚洲成a人片在线观| 免费无码黄网站在线看| 可以免费观看一级毛片黄a| 亚洲中文无码线在线观看| 免费无码又爽又刺激一高潮| 亚洲成片观看四虎永久| 亚洲综合色婷婷在线观看| 99蜜桃在线观看免费视频网站| 亚洲日韩国产一区二区三区| 久久亚洲国产成人影院| 91精品手机国产免费| 国产亚洲人成网站观看| 免费一级毛片在线播放放视频| 最近2019中文字幕免费看最新| 亚洲精品无码久久毛片波多野吉衣|