Thread.stop()方法会导致数据不一致的问题

stop()方法已经被jdk废弃,原因就是stop()方法太过于暴力,强行把执行到一半的线程终止,可能会引起一些数据

不一致的问题




public class TestQrcode{   
public static User user =new User();
public static class User{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(){
id=0;
name="0";
}
public String toString(){
return "User [id="+id+",name="+name+"]";
}
}
//修改线程类
public static class changeObjectThread extends Thread{
public void run(){
while(true){
synchronized (user) {
int v=(int)(System.currentTimeMillis()/1000);
user.setId(v);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
user.setName(String.valueOf(v));
}
Thread.yield();
}
}
}
//读取线程类
public static class ReadObjectThread extends Thread{
public void run(){
while(true){
synchronized (user) {
if(user.getId()!=Integer.parseInt(user.getName())){
System.out.println(user.toString());
}
}
Thread.yield();
}
}
}

public static void main(String[] args) throws InterruptedException {
new ReadObjectThread().start();
while(true){
Thread t =new changeObjectThread();
t.start();
Thread.sleep(150);
t.stop();
}
}

}

程序运行会出现如下现象:


 

猜你喜欢

转载自blog.csdn.net/m0_37846887/article/details/80926374