First of all, you are not starting any thread here! You should create a new thread and pass your confusingly named thread1
Runnable
to it:
thread1 t1 = new thread1();
final Thread thread = new Thread(t1);
thread.start();
Now, when you really have a thread, there is a built in feature to interrupt running threads, called... interrupt()
:
thread.interrupt();
However, setting this flag alone does nothing, you have to handle this in your running thread:
while(!Thread.currentThread().isInterrupted()){
try{
Thread.sleep(10);
}
catch(InterruptedException e){
Thread.currentThread().interrupt();
break; //optional, since the while loop conditional should detect the interrupted state
}
catch(Exception e){
e.printStackTrace();
}
Two things to note: while
loop will now end when thread isInterrupted()
. But if the thread is interrupted during sleep, JVM is so kind it will inform you about by throwing InterruptedException
out of sleep()
. Catch it and break your loop. That's it!
As for other suggestions:
Deprecated. This method is inherently unsafe[...]
- Adding your own flag and keeping an eye on it is fine (just remember to use
AtomicBoolean
or volatile
!), but why bother if JDK already provides you a built-in flag like this? The added benefit is interrupting sleep
s, making thread interruption more responsive.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…