2012-10-08 5 views
7

Tôi muốn biết cách tốt nhất về cách thực hành ngành là đọc trong một tập tin bằng cách sử dụng phương pháp đa luồng. Trong Java tôi sẽ làm một cái gì đó của các loại sau đây:java vs scala - đọc trong tập tin trên một chủ đề riêng biệt

class Reader { Result readFile(File file, Listener callback) } 
class Listener { void process(Result r) } 

Reader sẽ đẻ trứng một thread để tạo ra một kết quả và sau đó gọi lại Listener từ withing thread làm việc. Đây có phải là một cách tiếp cận tốt không? Làm thế nào điều này sẽ dịch sang Scala, mà có lẽ có các cơ chế khác tốt hơn để đạt được điều này?

+0

Không rõ ràng (với tôi ít nhất) cho dù bạn đang cố gắng đọc một hoặc nhiều tệp. Nếu có nhiều tệp thì câu trả lời của Kim Stebel sẽ tốt hơn. Nếu đó là một tệp duy nhất cần kết quả được xử lý trên các luồng khác nhau, thì câu trả lời khác có vẻ tốt hơn. –

+0

Ý bạn là "tốt hơn"? Mã ngắn hơn? Chắc là đúng. Nhiều người biểu diễn hơn? Có lẽ không, như Scala tạo ra rất nhiều mã đằng sau hậu trường. –

+0

nếu anh ta muốn mọi dòng trong tệp được xử lý đồng thời, anh ấy vẫn có thể làm điều đó với các bộ sưu tập song song. –

Trả lời

7

Một cách tiếp cận trong Scala sẽ là sử dụng các bộ sưu tập song song. Giả sử bạn có một chuỗi các tập tin:

files:Seq[File] = ... 

Bạn có thể biến nó thành một bộ sưu tập song song sử dụng files.par và sau đó sử dụng bản đồ để thực hiện xử lý. Bản đồ trong nội bộ sẽ sử dụng một hồ bơi thread để xử lý các phần của chuỗi đồng thời. Loại hồ bơi chủ đề nào được sử dụng có thể là configured.

files.par.map(readFile).foreach(process) 
1

Điều này có vẻ như đây sẽ là trường hợp sử dụng tốt cho Akka nếu bạn muốn có phương pháp thay thế.

+0

Akka chỉ là một khung diễn viên và afaik có thể được sử dụng từ Java. Có rất nhiều framworks diễn viên khác cho java cũng. –