views:

1814

answers:

4

In the case of an IM client. I have made 2 separate threads to handle sending packets (by std io) and receiving packets. The question is how to make these 2 threads run simultaneously so that I can keep prompting for input while at the same time be ready to receive packets at any time?

I have already tried setting a timer but the data is always lost receiving.

+1  A: 

Without more details, it is hard to give a complete answer. Nevertheless, here is the code for starting two threads:

Thread thread1 = new Thread () {
  public void run () {
    // ... your code here
  }
};
Thread thread2 = new Thread () {
  public void run () {
    // ... your code here
  }
};
thread1.start();
thread2.start();
jsight
my send and receive threads rely on sending and listening on UDP socket respectively. from what i can understand, your sample codes seem to inject the thread in the code instantly. i have created a runnable class for them, so will your approach be applicable to such?
lamsaitat
I don't know what "inject the thread in the code instantly" means. Perhaps you can post sample code to further explain what you mean?
jsight
as in ur code is capable of creating a thread locally in a main
lamsaitat
@lamsait: My code creates new threads which run independently. These are created wherever you execute them. I agree with Karlp that you seem to have a fundamental misunderstaning of threads.
jsight
yes indeed, i have to admit that in writing this IM service program 70% of the syntax, methods and classes are never heard of before. Big thanks to both you and Karlp.
lamsaitat
+4  A: 

Well, they won't run simultaneously unless you have a multiprocessor computer, but that's not usually the issue. What will happen is that each thread will get a slice of time, more or less alternatively.

If you're losing I/O, it's probably not the threading that's your real problem. can you tell us how you're reading this stuff?

Charlie Martin
+2  A: 

I think you might have missed something significant with either Threads, Streams or both :-)

You can start a new thread like this:

myThread.start();

The thread will be started and the run() method will be executed automatically by the jvm.

If the threads run-method is reading from a Stream, and it is the only one reading, it will not "miss" anything in that stream.

KarlP
A: 

For suppose i am using Two threads,one thread is executing its task and goes to sleep at that time the second thread is executing its task and goes to sleep. after that the first thread wake up and starts its execution like this, is it call as running threads simultaneously?

rajesh