stop()方法属于暴力终止线程的方法,有诸多隐患已经被废弃了。

下面演示的是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(); }
}

【java】 java 中stop方法终止线程的不良后果的更多相关文章

  1. thymeleaf模板引擎调用java类中的方法(附源码)

    前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...

  2. Jsp中如何通过Jsp调用Java类中的方法

    Jsp中如何通过Jsp调用Java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:cn.tianaoweb.com; 2.再在包中添加一个类:如 package com; public ...

  3. Java中Thread方法启动线程

    public class ThreadTest extends Thread {  private int count = 10; @Override public void run() { //重写 ...

  4. Java集合中那些类是线程安全的

    线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的.在jdk1.2之后,就出现许许多多非线程安全的类. 下面是这些线程安全的同步的类: vector:就比arraylist多 ...

  5. 第6章 Java类中的方法

    1.如何定义java的方法 什么是方法:方法使用来解决一类问题的代码集合,是一个功能模块在类中定义个方法的方法是: 访问修饰符 返回值类型 方法名(参数列表){ 方法体 } 1.访问修饰符,是限制该方 ...

  6. jsp中怎么调用java类中的方法

    在jsp页面中先要,引入java类 例如: <%@page import="javabean.DbConn"%><!-- 引入包中的"类" - ...

  7. Java 8 中的方法引用

    一.原理概要 lambda 表示式,可以作为某些匿名内部类的替代.主要目的是调用该内部类中的方法,而该方法的实现(重写)由 lambda表示式决定. 通常,我们可能不关心匿名内部类中的具体方法(被重写 ...

  8. Java 8 中的方法引用,轻松减少代码量,提升可读性!

    1. 引言 Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性. 方法引用是lambda表达式的一种特 ...

  9. 转载:Java多线程中join方法的理解

    转载自:http://uule.iteye.com/blog/1101994 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A ...

随机推荐

  1. 深入浅出分析MySQL常用存储引擎

    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...

  2. C++面向对象程序设计的一些知识点(1)

    1.函数重载而不出错是有条件的: (1).这些函数位于同一域内,如同一类中.同一文件中. (2).这些同名函数具有不同的参数特征标(特征标是指形參的个数.类型.排列顺序等). 2.引用特性(与指针对比 ...

  3. eclipse偶尔会反映迟钝,直接无视其报错

    比如,你在web.xml中配置了什么东西,在有的时候不一定就会立即被eclipse察觉到,即便你的配置正确了,甚至重启了几次服务器,它仍然给你报错 比如说,刚才我在web.xml中配置了一个tagli ...

  4. Debug文件夹是什么

    debug是一个隐藏的对象,用于进行和调试相关的工作.是系统调试文件夹,用来存放系统运行过程中调试模块的日志文件,以便管理员根据这些日志文件来发现计算机所存在的问题.其中“UserMode”文件夹下存 ...

  5. JDBC的介绍2

    一.基础知识 1. 数据持久化 持久化(persistence):对象在内存中创建后,不能永久存在.把对象永久的保存起来就是持久化的过程.而持久化的实现过程大多通过各种关系数据库来完成. 持久化的主要 ...

  6. css让footer永远保持在页面底部

    案例1:仅仅保存在页面底部.不固定. 思路: html: <div class="body"> <header>我是头部</header> &l ...

  7. 【Unity】动态调用其他脚本的函数

    本文转载自:http://blog.csdn.net/smilingeyes/article/details/17767269 第一种,被调用脚本函数为static类型,调用时直接用 脚本名.函数名( ...

  8. 【WPF】ScrollViewer无法滚动的问题

    还需要给ScrollViewer注册一个鼠标滚轮事件! XAML: <ScrollViewer x:Name="scrollViewer" Width="950&q ...

  9. sql server 删除主键、外键、索引、约束的脚本

    最近公司项目要升级新版本,涉及到数据库升级中各种约束.亦是整理出如下脚本方便以后查询. --删除全文索引 DECLARE c0 cursor for SELECT'DROP FULLTEXT INDE ...

  10. warning: ignoring option PermSize=256m; support was removed in 8.0

    使用jdk1.8后,控制台出现下面提示信息: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=256m; sup ...