在Java中封装多线程操作

时间:2013-12-05 15:09:50

标签: java multithreading osgi threadpool

我的情况是我有大量需要进行文件(只读)访问的类。这是在OSGI上运行的Web应用程序的一部分,因此将有很多并发需要访问。

所以我正在构建一个OSGI服务来访问文件系统以获取所有其他需要它的部分并提供集中访问,因为这也简化了文件位置的配置等。

在我看来,多线程方法与线程池一起最有意义。

所以问题是:

如果我这样做,我的服务有如下界面: FileService.getFileAsClass(类);

和方法getFileAsClass(类)看起来有点像这样:(这是一个草图,它可能不是完美的java代码)

public < T> T getFileAsClass(Class< T> clazz) {
Future<InputStream> classFuture = threadpool.submit(new Callable< InputStream>() {
        /* initialization block */
        {
        //any setup from configs.
        }

        /* implement Callable */
        public InputStream call() {
                         InputStream stream = //new inputstream from file location;
                         boolean giveUp = false;

                 while(null == stream && !giveUp) {
                             //Code that tries to read in the file 4
                             // times with a Thread.sleep() then gives up
                             // this is here t make sure we aren't busy updating file.
                         }
                         return stream;
        }
    });
     //once we have the file, convert it and return it.
     return InputStreamToClassConverter< T>.convert(classFuture.get());
}

这是否会正确等待相关操作才能调用InputStreamtoClassConverter.convert?

这是我第一次编写多线程java代码,所以我不确定我对某些行为的期望是什么。我不关心哪些线程完成的顺序,只关心文件处理是异步处理的,一旦完成文件拉取,然后才使用转换器。

0 个答案:

没有答案