在java多線程中舵稠,停止線程的方法有兩種:Thread.stop()和Thread.interruped()
stop()
停止一個線程可以使用stop()的方法但是這樣是線性不安全的超升,可能會產生臟數據,所以現在已經被廢用了哺徊,不建議使用室琢,下面舉個例子說明stop()的方法吧。
public class thread0821{
public static void main(String[] args) throws InterruptedException {
Myrun myrun=new Myrun();
myrun.start();
Thread.sleep(1000);
myrun.stop();
System.out.println(myrun.getMessage().getAccount()
+myrun.getMessage().getPassword());
}
}
class message {
private String account="11";
private String password="11";
public void setmessage(String account, String password) throws InterruptedException {
this.account = account;
Thread.sleep(5000);
this.password = password;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
class Myrun extends Thread{
public message getMessage() {
return message;
}
public void setMessage(message message) {
this.message = message;
}
message message=new message();
@Override
public void run() {
// TODO Auto-generated method stub
try {
message.setmessage("22", "22");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(message.getAccount()+message.getPassword());
}
}
運行結果是 2211
,那么強制終止的結果就是數據不能同步落追,加入使用interrupt()的方法呢盈滴,直接把Thread.stop改為Thread.interrupt(),結果是
那么在上面的例子中我們先不糾結怎么解決這個停止線程不產生臟數據,線看stop()和interrupt()的區(qū)別轿钠,從上面的結果可知巢钓,stop()是強制性終止線程,而interrupt()是可以繼續(xù)往下執(zhí)行疗垛。這里我們可以做個比喻:例如小孩在玩游戲症汹,媽媽回來了,stop的方法是媽媽立刻關掉電腦贷腕,而interrupt是媽媽很憤怒背镇,但是她為了不傷害孩子咬展,只是喊一聲"熊孩子,不能玩了"瞒斩,然后孩子就可以根據自己的情況再撐一會再自行關電腦