0

以下に示すように、そのファイルのすべての行で特定のファイルの出現回数を数えているJavaでファイルを処理しています。ここで、すべての行のスレッドを開始しています。

input = new BufferedReader(new FileReader(new File(finaName)));
    String line = null;
    while ((line = input.readLine()) != null) {
FileThread t = new FileThread(line);
t.start();
    }

FileThread st = new FileThread();
System.out.println("Size"+st.list.size());

FileThread.java

public class FileThread extends Thread
List<String> list = new ArrayList<String>();

public FileThread(){}
public FileThread(String line){}
private String line = null;
    public void run() {
    String[] tokens = line.split("\\|", LIST.length);
            String Symbol = null;
            try {
            Symbol = tokens[4];
                    list.add(symbol);

            } catch (Throwable t1) {
                t1.printStackTrace();
            }


        }

問題は、常に Size を 0 として取得していることです。サンプル出力を参照してください

BIM!A BIM!B BIM!C BIM!D サイズ0

4

1 に答える 1

0

私はあなたのコードにいくつかの変更を加えました。

public class FileThread extends Thread {
    private List<String> list = new ArrayList<String>();
    private boolean inThread = false;
    .......
    public int getListSize() {
        if(!inThread)
            return list != null ? list.size() : 0 ;
        else
            return 0;
    }

    public FileThread(String line) {
    }

    public void run() {
        inThread = true;
             // You logic of the thread
        inThread = false;
    }

    public static void main(String args[]) throws IOException {
     ..............

     ..............

     ..............
        System.out.println("Size" + st.getListSize());
    }

}
于 2012-12-05T06:16:59.717 に答える