I'm new to multithreaded; is this the right way to go about starting a thread?

```
if(!sesThread.isAlive()) {
    try {
        sesThread.start();
    }catch(IllegalThreadStateException e) { System.out.println("y u start");}
}

```

**premise**: caller processes bytearrays and push it to a queue. session thread is to deque and further process them until queue is empty and hence sessions's run() returns

**problem**: im getting alot of exceptions getting thrown and even so my session thread for some reason has its run() being called twice!

i.e. (start > start > end > end) NOT (start > end > start > end)

Is there some way to synchronize or ensure this "lazy instantiation"-ish mechanism call start only once?

ps. im making a multithreaded UDP socket server aimed at delivery speed, so itd be great to have minimal delay and not some thread.sleep() prior to isAlive()