Solved

how to make InputStream and OutputStream thread safe.

Posted on 2006-11-01
14
2,622 Views
Last Modified: 2011-08-18
well, have multiple clients connecting to a Socket Server,
some kind simple chat application.

are the InputStream and OutputStream thread safe,
or do i have do something special to ensure that.

thanx
0
Comment
Question by:Knightley
  • 6
  • 4
  • 3
14 Comments
 
LVL 24

Expert Comment

by:sciuriware
ID: 17849895
If they address different files there is no problem.

;JOOP!
0
 
LVL 35

Expert Comment

by:girionis
ID: 17850063
> are the InputStream and OutputStream thread safe,

They are since each time you will be getting the input/output stream of the coket connecting to the server.
0
 
LVL 1

Author Comment

by:Knightley
ID: 17851690
a server connected with several clients is always thread safe?
i rememer somebody told me it is not, but forget where.

so when i start a server:
1. accept several clients by creating a thread for each.
2. do some input and output
3. do some System.out.println

everything i did above are thread safe?

thanx
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 24

Expert Comment

by:sciuriware
ID: 17851784
The IO is, the thread operations may not be.

;JOOP!
0
 
LVL 35

Accepted Solution

by:
girionis earned 30 total points
ID: 17856234
> everything i did above are thread safe?

If you do not deal with any instance variables that are shared between threads then it is. The following is thread safe:

public SocketServer server = new SocketServer(port);
public Socket connection;

while (true)
{
   connection = server.accept();
   ClientConnection client = new ClientConnection(connection);
   Thread t = new Thread(client);
   t.start();
}

public class ClientConnection
{
   private Socket socket = null;
   private InputStream is = null;
   private OutputStream os = null;

   public ClientConnection(Socket s)
   {
      socket = s;
   }

   public void run()
   {
      is = socket.getInputStream();
      os = socket.getOutputStream();
      while (...)
      ....
      ....
   }
}

The following is not thread safe

public SocketServer server = new SocketServer(port);
public Socket connection;

// This is not thread safe
public int notThreadSafeVariable = 0;

while (true)
{
   connection = server.accept();
   ClientConnection client = new ClientConnection(connection, notThreadSafeVariable);
   Thread t = new Thread(client);
   t.start();
}

public class ClientConnection
{
   private Socket socket = null;
   private InputStream is = null;
   private OutputStream os = null;
   private int notThreadSafeVariable = 0;

   public ClientConnection(Socket s, int notThreadSafeVariable)
   {
      socket = s;
      this.notThreadSafeVariable = notThreadSafeVariable;
   }

   public void run()
   {
      is = socket.getInputStream();
      os = socket.getOutputStream();
      while (...)
      ....
      ....
   }

   public int getNotThreadSafeVariable()
   {
      return notThreadSafeVariable--;
   }

   public void incrementNotThreadSafeVariable()
   {
      notThreadSafeVariable++;
   }
}

In the example above the "notThreadSafeVariable" is not safe since you cannot guarantee that each thread will see the variable incremented or decremented by exactly 1.
0
 
LVL 35

Expert Comment

by:girionis
ID: 17856251
Also the ClientConnection class should implement Runnable. I forgot about it.
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 18046470
:<
0
 
LVL 1

Author Comment

by:Knightley
ID: 18046619
sorry sciuriware,

i received the CleanUp post, and give the points in a hurry.

in my defense, though your anwsers are correct and swift,
and should receive the points.

they are just so SHORT, i am afraid i overlooked them.

sorry again, if there is a way to send you the points,
tell me how. if not, i hope i could make it up to you somehow.

cu
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 18046706
No problem, you can't always  :)
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 18046721
This is an interesting forum,
sometimes you get points for almost nothing,
sometimes you work hard on a solution and ... nope.
Don't worry!

;JOOP!
0
 
LVL 35

Expert Comment

by:girionis
ID: 18051966
You can still ask a question in Community Support to reopen the question and assign the points to sciuriwar.
0
 
LVL 24

Expert Comment

by:sciuriware
ID: 18052087
I looked this over. Let it be as it is. Next question please ....
0
 
LVL 1

Author Comment

by:Knightley
ID: 18053327
i think its alright. girionis, u help a lot too.

next time u anwser my question i will give it to
scicuriware. :)

thanx to u both.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
fibonacci ten numbers 4 45
type mismatch (Object[] to double[] 4 33
ejb wildfly example 2 20
Detect Closed Loops (circles, figure-8s, etc) in PNG Images 6 56
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question