Solved

how to make InputStream and OutputStream thread safe.

Posted on 2006-11-01
14
2,662 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
arguments to jar 5 39
What's wrong with this code? 4 34
Netbeans and org.apache.commons.lang3 issue 3 25
Tomcat 9 + java 8 error while trying to deploy a war file 2 714
After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
In this post we will learn different types of Android Layout and some basics of an Android App.
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
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…

749 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