<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

    主站蜘蛛池模板: 免费国产午夜高清在线视频| 天堂亚洲免费视频| 免费成人在线观看| 成人免费一区二区三区| 福利片免费一区二区三区| 亚洲春色另类小说| 亚洲天堂视频在线观看| 国产成人综合亚洲亚洲国产第一页| 好大好硬好爽免费视频| 成年人免费的视频| 99re这里有免费视频精品| 一区二区三区观看免费中文视频在线播放 | 国产美女视频免费观看的网站| 国产日本亚洲一区二区三区| 亚洲 日韩经典 中文字幕 | 无码成A毛片免费| 一级毛片**不卡免费播| 日本在线免费观看| 精品国产免费一区二区三区香蕉 | 亚洲成aⅴ人片久青草影院按摩| 亚洲mv国产精品mv日本mv| 亚洲欧洲日产韩国在线| 天天爽亚洲中文字幕| 亚洲一区二区三区丝袜| 午夜在线亚洲男人午在线| 一级成人毛片免费观看| 毛片在线全部免费观看| 久草视频在线免费看| 女人与禽交视频免费看| 亚洲av无码不卡私人影院| 亚洲动漫精品无码av天堂| 亚洲视屏在线观看| 无遮挡a级毛片免费看| 国产一精品一AV一免费| 天天摸天天操免费播放小视频 | 99精品免费视品| 成年女人视频网站免费m| 日本亚洲视频在线| 亚洲精品蜜夜内射| 全黄大全大色全免费大片| 成熟女人特级毛片www免费|