java吧 关注:1,290,210贴子:12,820,421

【多线程】 认真请教一个问题

只看楼主收藏回复

有一个主线程 里面是循环等待输入指令,在没一个循环中会增加一个线程,在这个线程任务完成时会输出一个“任务完成”, 如何解决 这个“任务完成”让他不会影响指令的输入 ?


1楼2012-12-26 18:27回复
    上代码
    package Ten;
    import java.io.*;import java.util.Scanner;
    public class One extends Thread { static String from; static String to; private BufferedReader br; private BufferedWriter bw;
    public void run(){ File fro=new File(from); File gto=new File(to); try { FileReader fr=new FileReader(fro); FileWriter fw=new FileWriter(gto); br = new BufferedReader(fr); bw = new BufferedWriter(fw); String s=null; while((s=br.readLine())!=null){ bw.write(s); bw.newLine(); } System.out.print("复制完成"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { br.close(); } catch (IOException e) { e.printStackTrace(); } try { bw.flush(); } catch (IOException e) { e.printStackTrace(); } try { bw.close(); } catch (IOException e) { e.printStackTrace(); } }
    }
    public static void main(String[] args) { do{ System.out.print("请输入要复制的文件路径和名称:"); from=new Scanner(System.in).next(); System.out.print("请输入要复制的文件路径和名称:"); to=new Scanner(System.in).next(); One m=new One(); if(!from.equals("0") || !to.equals("0")){ m.start(); } }while(!from.equals("0"));
    }
    }


    2楼2012-12-26 18:27
    回复
      2025-12-06 18:31:15
      广告
      不感兴趣
      开通SVIP免广告
      怎么没人呀


      3楼2012-12-26 18:57
      回复

        害怕我刚输入一个F:复制完成出来


        4楼2012-12-26 19:02
        回复
          都下班了吗 ?


          5楼2012-12-26 19:03
          回复


            6楼2012-12-26 19:17
            回复
              这个需要监听!!


              7楼2012-12-26 19:26
              收起回复
                本吧多线程分舵的舵主夜里会出来答疑的,请耐心等待!


                IP属地:重庆来自Android客户端8楼2012-12-26 19:51
                收起回复
                  2025-12-06 18:25:15
                  广告
                  不感兴趣
                  开通SVIP免广告


                  IP属地:河南9楼2012-12-26 20:08
                  回复
                    循环等待?不是用wait notify吗?


                    10楼2012-12-26 20:38
                    收起回复
                      好像没有很简单的方式,我再想想!下面这个虽然行,但是觉得有点复杂,觉得应该会有简单的方式:
                      import java.util.concurrent.*;
                      import java.util.*;
                      import java.io.*;
                      class Task implements Callable<String> {
                      public String call() {
                      try {
                      TimeUnit.SECONDS.sleep(1);
                      } catch (InterruptedException e) {}
                      return "Finished!";
                      }
                      public static void main(String[] args) throws Exception {
                      ExecutorService exec = Executors.newCachedThreadPool();
                      ArrayList<Future<String>> results = new ArrayList<Future<String>>();
                      BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
                      String line;
                      System.out.print("$ ");
                      while ((line = stdin.readLine()) != null && line.length() != 0) {
                      results.add(exec.submit(new Task()));
                      for (Iterator<Future<String>> iterator = results.iterator(); iterator.hasNext(); ) {
                      Future<String> future = iterator.next();
                      if (future.isDone()) {
                      System.out.println(future.get());
                      iterator.remove();
                      }
                      }
                      System.out.print("$ ");
                      }
                      exec.shutdown();
                      }
                      }


                      11楼2012-12-27 06:32
                      收起回复
                        考虑再三,认为无论使用何种方式,“任务完成”的消息都不能直接输出到标准输出!


                        12楼2012-12-27 08:09
                        收起回复
                          弄个状态判断也行。


                          IP属地:四川15楼2012-12-27 09:30
                          收起回复
                            感觉复制完成的时候 就像存在buffer中一样 当输入保存路径的时候再将它复制在磁盘上


                            16楼2012-12-27 09:57
                            回复
                              2025-12-06 18:19:15
                              广告
                              不感兴趣
                              开通SVIP免广告
                              要控制输出时间就把全部的任务完成都记录到一个公共变量里,等你主线程调用时再输出


                              IP属地:江苏20楼2012-12-27 11:16
                              回复