【发布时间】:2014-04-05 10:28:53
【问题描述】:
所以我有一个可调用的类,它处理给定的文本文件,然后生成一个输出文本文件。我想用自己的线程处理每个文件,但是我对使用相同对象启动线程与使用不同线程对象启动线程的区别感到困惑。除了输入文件不同外,两个线程都做完全相同的事情。最初我想使用一个线程对象,但如果我使用一个线程对象,我将如何加载不同的文件。
例如
ExecutorService pool = Executors.newFixedThreadPool(2);
Runner test = new Runner("file1.txt");
Future<String> ret = pool.submit(test);
Future<String> ret2 = pool.submit(test);
VS
ExecutorService pool = Executors.newFixedThreadPool(2);
Runner test = new Runner("file1.txt");
Runner test2 = new Runner("file2.txt");
Future<String> ret = pool.submit(test);
Future<String> ret2 = pool.submit(test2);
我的问题/因素
- 上面的示例清楚地命名了文本文件,而在实际实现中这些文件是未知的,因此通过迭代循环访问。
- 如果我要使用单线程对象,那么我将如何处理不同的文件
- 如果使用两个单独的线程对象,那么我还需要担心同步问题。
提前致谢
【问题讨论】:
-
在这里看不到任何
Thread对象。我看到Runnable的实例。我不知道您是否需要使用synchronized,因为您没有显示任何代码。此外,多线程文件 IO 是一种反模式 - 除非您对文件进行非常繁重的处理或某种 SSD RAID,否则它会使事情变慢。
标签: java multithreading functional-programming