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.
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