Code:
public Server(int port, int poolSize) throws IOException {
serverSocket = new ServerSocket(port);
poolThreads = Executors.newFixedThreadPool(poolSize);
}
public Server(int port, int poolSize) throws IOException {
serverSocket = new ServerSocket(port);
poolThreads = Executors.newFixedThreadPool(poolSize);
}
U klasi server imam i sledeće definicije objekata za sinhronizaciju niti prilikom čitanja podataka i ispisa na ekran.
Code:
private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(true);
private final Lock writeLock = rwLock.writeLock();
private final ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(true);
private final Lock writeLock = rwLock.writeLock();
Server izvršava metodu serve, koja prihvata konekciju i prosleđuje socket i writeLock niti za obradu.
Code:
public void serve() {
try {
while (!shutdown) {
Socket socket = serverSocket.accept();
poolThreads.execute(new ServerThread(socket, writeLock));
}
} catch (IOException e) {
poolThreads.shutdown();
}
}
public void serve() {
try {
while (!shutdown) {
Socket socket = serverSocket.accept();
poolThreads.execute(new ServerThread(socket, writeLock));
}
} catch (IOException e) {
poolThreads.shutdown();
}
}
U klasi ServerThread run metoda samo poziva metod processRequest koji izgleda ovako.
Code:
private void processRequest(Socket socket) {
writeLock.lock();
try {
is = socket.getInputStream();
is.read(buffer);
for (int i = 0; i < buffer.length; i++)
System.out.print(buffer[i]);
System.out.println();
} catch (IOException e) {
e.printStackTrace();
} finally {
closeSocket();
writeLock.unlock();
}
}
private void processRequest(Socket socket) {
writeLock.lock();
try {
is = socket.getInputStream();
is.read(buffer);
for (int i = 0; i < buffer.length; i++)
System.out.print(buffer[i]);
System.out.println();
} catch (IOException e) {
e.printStackTrace();
} finally {
closeSocket();
writeLock.unlock();
}
}
Kada pokrenem server pa pustim taj uređaj da šalje podatke, desi mi se da ispiše prvi put to što treba i nakon toga stoji. Ako prvo pustim uređaj da šalje podatke, pa potom pokrenem server radi ok. Ne znam u čemu bi mogao da bude problem?