【java】 java 中stop方法终止线程的不良后果
2015-12-29 16:18
357 查看
stop()方法属于暴力终止线程的方法,有诸多隐患已经被废弃了。
下面演示的是stop方法会释放锁,造成数据不一致的问题。
测试类:
可见,控制台输出的并非预期的结果。
在java中终止线程的替换方法是使用interrupt方法和return结束线程.
下面演示的是stop方法会释放锁,造成数据不一致的问题。
package com.xwolf.java.thread; /** * Created by Administrator on 2015/12/29 0029. */ public class SynUser { private String name="Jack" ; private String pwd="12345"; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } synchronized public void printUser(String name,String pwd){ this.name=name; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } this.pwd=pwd; } }
测试类:
package com.xwolf.java.thread; /** * Created by Administrator on 2015/12/29 0029. */ public class StopThreadReleaseLock extends Thread { private SynUser synUser; public StopThreadReleaseLock(SynUser user){ this.synUser=user; } @Override public void run() { synUser.printUser("Suse","linux"); } public static void main(String[] args){ SynUser user = new SynUser(); StopThreadReleaseLock lock = new StopThreadReleaseLock(user); lock.start(); try { Thread.sleep(300); lock.stop(); System.out.println(user.getName()+","+user.getPwd());//Suse,12345 } catch (InterruptedException e) { e.printStackTrace(); } } }
可见,控制台输出的并非预期的结果。
在java中终止线程的替换方法是使用interrupt方法和return结束线程.
package com.xwolf.java.thread; /** * Created by Administrator on 2015/12/29 0029. * * 终止线程的方法 */ public class StopThread extends Thread { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(i); //当前线程是否中断 if (this.isInterrupted()) { System.out.println("当前线程停止了," + i); return; } } } public static void main(String[] args){ StopThread stopThread = new StopThread(); stopThread.start(); stopThread.interrupt(); } }
相关文章推荐
- 关于spring和springmvc使用过程中的问题帖(持续更新)
- 浅析Java中的final关键字
- 如何使用eclipse上传项目到git.osc
- Java多态性理解
- 为什么在eclipse中按F5调试进不到方法中
- Spark:用Scala和Java实现WordCount
- 各个浏览器下载乱码问题
- ERROR org.hibernate.proxy.pojo.javassist.JavassistProxyFactory 解决方法
- spring security 11种过滤器介绍
- Spring MVC过滤器-委派过滤器代理(DelegatingFilterProxy)
- Spring注解
- JAVA中的集合
- maven项目 误点Disable Maven Nature 变普通 java web项目
- Java 数据库操作
- Java类集学习(二)List接口
- Spring BeanPostProcessor 详解
- JAVA基础实例(三)--排序
- MyBatis代码生成工具mybatis-generator在Myeclipse2014中的使用
- eclipse maven学习记录
- 安卓向服务器(Spring)发送json