Piszę program w architekturze klient-serwer. Jestem początkujący i mam problem z doborem odpowiedniej klasy.

Mam wątek serwera dla każdej pary klientów, i chcę aby naprzemiennie ( np. przez 30 sekund lub po dostaniu konkretnej wiadomości ) przestał słuchać/próbować czytać w strumienia/bufora dla połączenia(socket/channel) 1-szego klienta, i zaczął słuchanie wejścia/wyjścia dla połączenia drugiego klienta.
Dla tego problemu wydaje się jedyną opcją SocketChannel z java.nio, żeby gdy nie może nic przeczytać mógł po odliczonym czasie porzucić połączenie i słuchać drugiego połączenia. Dobrze myślę?

Drugie to sprawa bufora, wymyśliłem, że klient wysyła obiekt typu Akcja, który zawiera typ akcji, odpowiednie argumenty dla danego typu.
Widziałem bufory dla typów podstawowych oraz byte buffer. Ja nie potrzebuję mieć bufora i móc robić coś innego, tylko mieć komunikację call(klient)-back(serwer) gdzie mogę przesłać obiekt konkretnego typu ( będzie różnych rozmiarów, bo może mieć w polach prywatnych różne Listy ).
Jak to wykonać? Wiem, że dla zwykłego IO jest ObjectOutputStream, czy jest coś podobnego dla NIO ( lub czy mogę używać do rozmowy na połączeniu sturmienia IO zachowująć możliwość przerwania czytania ze strumienia? )

Dziękuje za pomoc