1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Duvida sobre Thread

Fala galera, to com uma dúvida que está me matando, to com uma atividade da faculdade onde eu tenho que gravar alguns dados de uns objetos no arquivo, mas a gravação desses dados tem que ser feito através de uma thread, a classe tem que implementar runnable, fiquei sem saber como iria passar o objeto que vai ser gravado pra dentro da classe que será uma thread e se encarregará de gravar no arquivo, então, eu fiz a seguinte situação, gostaria de saber de vocês mais experiente se isso é correto de se fazer ou existe uma forma melhor de fazer isso.

Estou criando um atributo Object.

Quando instanciado a classe que implementa thread espera que seja passado um objeto no seu construtor.

segue o código.

public class Log implements Runnable{

    private Object object;

    public Log(Object o) {
        setObject(o);
    }

    @Override
    public void run() {
        try {
            inserir(getObject());
        } catch (IllegalArgumentException | IllegalAccessException
                | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    private static void inserir(Object o)  throws IOException, IllegalArgumentException, IllegalAccessException {
        File f = new File("log.txt");
        FileOutputStream outputStream  = new FileOutputStream(f);
        ObjectOutputStream oos = new ObjectOutputStream(outputStream);
        oos.writeObject(pegaDadosLog(o));
        oos.flush();
        oos.close();
        System.out.println("Gravou");
    }

    private static String pegaDadosLog(Object o) throws IllegalArgumentException, IllegalAccessException{
        StringBuilder sb = new StringBuilder();
        Field [] fields = o.getClass().getDeclaredFields();
        for (Field campo : fields) {
            campo.setAccessible(true);
            if(campo.isAnnotationPresent(br.ucb.talp.simulado.ennotations.Log.class)){
                sb.append(campo.getName()+" "+campo.get(o));
            }
        }
        return sb.toString();
    }

    public Object getObject() {
        return object;
    }
    public void setObject(Object object) {
        this.object = object;
    }

}

A chamada está da seguinte forma

public class Teste {
    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, IOException {
        do{
            Urna u = View.lerUmaUrna();
        new Thread(new Log(u)).start();
        }while(Leitora.lerInt("Deseja informar mais uma urna? 1 - sim 2 nao")!= 2);
    }
}

Desde já agradeço todo aqueles que me ajudar.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags threads ou faça a sua própria pergunta.