Why is this code not thread safe? 2) What issues could arise if it is not fixed? 3) How you would fix it using what you learned about synchronization? You must write lines of code or fix lines of code that already exist in the file for full credit. mport java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.function.Consumer; import javafx.application.Platform; import javafx.scene.control.ListView; public class Server{ int count = 1; ArrayList clients = new ArrayList(); TheServer server; private Consumer callback; Server(Consumer call){ callback = call; server = new TheServer(); server.start(); } public class TheServer extends Thread{ public void run() { try(ServerSocket mysocket = new ServerSocket(5555);){ System.out.println("Server is waiting for a client!"); while(true) { ClientThread c = new ClientThread(mysocket.accept(), count); callback.accept("client has connected to server: " + "client #" + count); clients.add(c); c.start(); count++; } }//end of try catch(Exception e) { callback.accept("Server socket did not launch"); } }//end of while } class ClientThread extends Thread{ Socket connection; int count; ObjectInputStream in; ObjectOutputStream out; ClientThread(Socket s, int count){ this.connection = s; this.count = count; } public void updateClients(String message) { for(int i = 0; i < clients.size(); i++) { ClientThread t = clients.get(i); try { t.out.writeObject(message); } catch(Exception e) {} } } public void run(){ try { in = new ObjectInputStream(connection.getInputStream()); out = new ObjectOutputStream(connection.getOutputStream()); connection.setTcpNoDelay(true); } catch(Exception e) { System.out.println("Streams not open"); } updateClients("new client on server: client #"+count); while(true) { try { String data = in.readObject().toString(); callback.accept("client: " + count + " sent: " + data); updateClients("client #"+count+" said: "+data); } catch(Exception e) { callback.accept("OOOOPPs...Something wrong with the socket from client: " + count + "....closing down!"); updateClients("Client #"+count+" has left the server!"); clients.remove(this); break; } } }//end of run }//end of client thread }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question

1.)Why is this code not thread safe?

2) What issues could arise if it is not fixed?

3) How you would fix it using what you learned about synchronization? You must write lines of code or fix lines of code that already exist in the file for full credit.

mport java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.function.Consumer; import javafx.application.Platform; import javafx.scene.control.ListView; public class Server{ int count = 1; ArrayList clients = new ArrayList(); TheServer server; private Consumer callback; Server(Consumer call){ callback = call; server = new TheServer(); server.start(); } public class TheServer extends Thread{ public void run() { try(ServerSocket mysocket = new ServerSocket(5555);){ System.out.println("Server is waiting for a client!"); while(true) { ClientThread c = new ClientThread(mysocket.accept(), count); callback.accept("client has connected to server: " + "client #" + count); clients.add(c); c.start(); count++; } }//end of try catch(Exception e) { callback.accept("Server socket did not launch"); } }//end of while } class ClientThread extends Thread{ Socket connection; int count; ObjectInputStream in; ObjectOutputStream out; ClientThread(Socket s, int count){ this.connection = s; this.count = count; } public void updateClients(String message) { for(int i = 0; i < clients.size(); i++) { ClientThread t = clients.get(i); try { t.out.writeObject(message); } catch(Exception e) {} } } public void run(){ try { in = new ObjectInputStream(connection.getInputStream()); out = new ObjectOutputStream(connection.getOutputStream()); connection.setTcpNoDelay(true); } catch(Exception e) { System.out.println("Streams not open"); } updateClients("new client on server: client #"+count); while(true) { try { String data = in.readObject().toString(); callback.accept("client: " + count + " sent: " + data); updateClients("client #"+count+" said: "+data); } catch(Exception e) { callback.accept("OOOOPPs...Something wrong with the socket from client: " + count + "....closing down!"); updateClients("Client #"+count+" has left the server!"); clients.remove(this); break; } } }//end of run }//end of client thread }

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Terminal Threads
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education