2010-10-19 10 views
7

Este es el escenario:¿Es posible leer y escribir en un archivo al mismo tiempo?

  • ThreadA va a leer de algunos zócalo y escribir datos en "MyFile.txt"
  • ThreadB va a leer "MiArchivo", y cuando se llega al final, se bucles hasta que haya nuevos datos disponibles en MyFile (porque no quiero volver a abrir "MyFile.txt", y perder el tiempo, así que llego a la posición desde donde estaba ...).

¿Es posible hacer tal cosa?

Si no, ¿hay alguna otra manera de hacer tal cosa?

+0

posible duplicado de [¿Cómo se utiliza Java para leer de un archivo que está siendo activamente escrito?] (Http://stackoverflow.com/questions/4149/ how-do-i-use-java-to-read-from-a-file-that-is-being-being-written) –

+0

He agregado un enlace a una pregunta que es un duplicado de este. Pero de paso, ¿has visto RandomAccessFile? No necesita volver a leer todo un archivo para leer desde un puesto en particular –

Respuesta

13

El problema que mencionas es un famoso Producer Consumer Problem

solución común para esto es utilizar BlockingQueue

Un ejemplo de uso en el mundo real está en AjaxYahooSearchEngineMonitor

Lo que un hilo no es, presentará una cadena para hacer cola, y luego regresar inmediatamente.

Lo que hace el hilo B es que recogerá el elemento de la cola uno por uno y lo procesará. Cuando no hay ningún elemento en la cola, el hilo B esperará allí. Vea la línea 83 del código fuente.

+0

¡muchas gracias! eso es exactamente lo que quería. es mejor que leer/escribir desde DataBase o archivo. – mohamida

2

creo que es posible el uso de las bibliotecas de Java NIO

+1

No creo que sea Suresh, pero me complace que me corrijan si muestra cómo hacerlo. –

+0

@Nick usando selectores para cada hilo y sincronizarlos es posible. –

Cuestiones relacionadas