在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()的区别,从上面的结果可知,stop()是强制性终止线程,而interrupt()是可以继续往下执行。这里我们可以做个比喻:例如小孩在玩游戏,妈妈回来了,stop的方法是妈妈立刻关掉电脑,而interrupt是妈妈很愤怒,但是她为了不伤害孩子,只是喊一声"熊孩子,不能玩了",然后孩子就可以根据自己的情况再撑一会再自行关电脑
网友评论