Solved

how to make InputStream and OutputStream thread safe.

Posted on 2006-11-01
14
2,773 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

 
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

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

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

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 Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.

624 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