一:直接利用线程中给出的方法来终止现场--该方法直接把线程停止
public class ThreadStop1 {
public static void main(String[] args) {
stratrun();
}
public static void stratrun(){
final ExecutorService pool = Executors.newSingleThreadExecutor();
pool.submit(new Runnable() {
@Override
public void run() {
for(int i = 0;i<1000;i++){
System.out.println(Thread.currentThread().getName()+"i:"+i);
if(i==20){
List<Runnable> p = pool.shutdownNow();
System.out.println("pool has bean closed!!!!"+p.get(0).toString());
}
}
}
});
}
}
二:采用interrupt的特性来结束该正在运行的线程
<pre name="code" class="java">public class TestThreadStop {
public static void main(String[] args) {
stratrun();
}
public static void stratrun(){
ExecutorService pool = Executors.newCachedThreadPool();
Future<?> future = pool.submit(new Runnable() {
@Override
public void run() {
while(true){
boolean interrupted = Thread.interrupted();
System.out.println(Thread.currentThread().getName()+"i:..."+interrupted);
if(interrupted){
System.out.println("DONE!");
return;
}
}
}
});
try {
Thread.sleep(1000);
future.cancel(true);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("==========="+Thread.currentThread().getName()+"===========");
}
}