Como duas linhas de execução compartilham o mesmo espaço de endereçamento, o mecanismo básico de comunicação entre elas é através da referência a um mesmo objeto. Neste caso, as duas linhas de execução devem ter as referências para esses objetos compartilhados.
Quando for preciso transferir dados de uma linha de execução
para outra, é possível usar a comunicação através de um
pipe. Neste caso, um linha de execução tem a referência
para um extremo da conexão (por exemplo, um objeto
pout
criado com o construtor
PipedOutputStream()
) e a outra linha de execução
tem a referência para o outro extremo (no exemplo, um objeto
pin
criado com o construtor
PipedInputStream(pout)
).