Re: Java Thread Problem
Sanny wrote:
I use a thread to call a function in a new thread.
Here is the code I use
But only fragments of it. You need to provide an SSCCE.
<http://mindprod.com/jgloss/sscce.html>
private Thread runner2;
public void start2(){
runner2 = new Thread(this);
runner2.setPriority(Thread.MAX_PRIORITY);
Do not muck with Thread priorities here.
runner2.start();
}
and in run of thread
public void run(){
Thread thisThread = Thread.currentThread();
If you only use 'thisThread' once, for the comparison, you have no need for
the variable. Just use the currentThread() expression directly.
if (runner2==thisThread){
This check-and-set idiom will fail, absent some form of synchronization.
runner2.setPriority(Thread.MAX_PRIORITY);
Do not set Thread priorities until you know more about how threads work.
callfunction1();
Since you're already seen to be calling a function, this isn't a great name
for a method. Also, use camel case in the name.
..
<http://mindprod.com/jgloss/sscce.html>
..
<http://mindprod.com/jgloss/sscce.html>
..
..
start2();to start a new thread
Is this supposed to be part of the code snippet, or part of the narrative?
// END THIS THREAD
runner2=null;
try{
runner2.destroy();
Do you read the API docs? You should.
<http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#destroy()>
**Deprecated.** ... the method was never implemented.
If if were to be implemented, it would be deadlock-prone
Whoops.
}catch (NullPointerException e){
//System.out.println("Bad URL: "+page);
As shown, the code is guaranteed to throw this exception. Well, nearly
guaranteed; concurrency anomalies might actually prevent the exception.
}
}
I use start2() to start a new runner2 thread.
But my Question is When I call the function to start a new thread Will
the Original thread runner2 stopped or a new thread runner2 will be
created?
I want that runner2 thread first stop and then start a new thread
runner2. How to destroy a thread and start it again.
Why would you want to destroy the thread? Why start it at all if you're
planning to destroy it? I don't understand.
Once I call runner2.destroy, will that thread stops? And in case I
What thread? You have runner2 set to null, unless a concurrent action somehow
breaks through the memory barrier and changes it.
Even if runner2 referenced a Thread, the destroy() wouldn't stop it, because
"the method was never implemented"!
start a new thread runner2 will the old thread destroy both old & new
threads as both use same variable runner2?
There is a difference between the variable and the object to which it points.
Actions come from objects, not variables.
--
Lew