"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como retornar valores de operações de thread em Java?

Como retornar valores de operações de thread em Java?

Publicado em 2024-11-08
Navegar:940

How to Return Values from Thread Operations in Java?

Retornando valores de operações de thread

Na programação multithread, a interação entre threads geralmente requer a troca de dados. Um cenário comum é tentar recuperar o resultado de uma operação executada em um thread separado.

Considere o código de exemplo abaixo:

public void test() {
    Thread uiThread = new HandlerThread("UIHandler") {
        public synchronized void run() {
            int value = 2; // To be returned to test()
        }
    };
    uiThread.start();
}

Neste caso, um valor é modificado em um thread separado (neste caso, o "UIHandler"). O desafio está em retornar esse valor ao método chamador, que precisa recuperar os dados modificados.

Aproveitando o estado de um objeto

Uma abordagem para esse problema é usar o estado de um objeto para armazenar e recuperar os dados necessários. Por exemplo, você pode criar uma classe personalizada que implemente a interface Runnable, permitindo que ela seja executada como um thread. Dentro desta classe, você pode ter um campo para armazenar o valor calculado pela thread:

public class Foo implements Runnable {
    private volatile int value;

    @Override
    public void run() {
        value = 2;
    }

    public int getValue() {
        return value;
    }
}

Com esta implementação, você pode separar a criação do thread e a recuperação do valor calculado. Aqui está um exemplo:

Foo foo = new Foo();
Thread thread = new Thread(foo);
thread.start();
thread.join();
int value = foo.getValue(); // Retrieve the modified value

Principais considerações

É importante observar que threads não retornam valores nativamente. Fazendo referência a um thread como uma classe comum e solicitando seu valor usando métodos como getValue(), você pode preencher essa lacuna. Além disso, você deve garantir mecanismos de sincronização para evitar condições de corrida de dados e manter a segurança do thread.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3