【java】 java 中stop方法终止线程的不良后果
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方法终止线程的不良后果的更多相关文章
- thymeleaf模板引擎调用java类中的方法(附源码)
前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...
- Jsp中如何通过Jsp调用Java类中的方法
Jsp中如何通过Jsp调用Java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:cn.tianaoweb.com; 2.再在包中添加一个类:如 package com; public ...
- Java中Thread方法启动线程
public class ThreadTest extends Thread { private int count = 10; @Override public void run() { //重写 ...
- Java集合中那些类是线程安全的
线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的.在jdk1.2之后,就出现许许多多非线程安全的类. 下面是这些线程安全的同步的类: vector:就比arraylist多 ...
- 第6章 Java类中的方法
1.如何定义java的方法 什么是方法:方法使用来解决一类问题的代码集合,是一个功能模块在类中定义个方法的方法是: 访问修饰符 返回值类型 方法名(参数列表){ 方法体 } 1.访问修饰符,是限制该方 ...
- jsp中怎么调用java类中的方法
在jsp页面中先要,引入java类 例如: <%@page import="javabean.DbConn"%><!-- 引入包中的"类" - ...
- Java 8 中的方法引用
一.原理概要 lambda 表示式,可以作为某些匿名内部类的替代.主要目的是调用该内部类中的方法,而该方法的实现(重写)由 lambda表示式决定. 通常,我们可能不关心匿名内部类中的具体方法(被重写 ...
- Java 8 中的方法引用,轻松减少代码量,提升可读性!
1. 引言 Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性. 方法引用是lambda表达式的一种特 ...
- 转载:Java多线程中join方法的理解
转载自:http://uule.iteye.com/blog/1101994 thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A ...
随机推荐
- Linux,Windows中的相对路径、绝对路径
1.Windows绝对路径:以盘符开始 如C:/a.txt相对路径:. 指的是当前目录.. 指的是挡圈目录的上一级目录./test表示当前目录下的test文件夹/test表示当前盘符下的test文件夹 ...
- UTF8字符串在lua的截取和字数统计【转载】
转载自:GitHub:pangliang/pangliang.github.com 需求 按字面个数来截取 函数(字符串, 开始位置, 截取长度) utf8sub(,) = 好1世界哈 utf8sub ...
- LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法
Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...
- 可以嵌入程序的chrome
https://bitbucket.org/chromiumembedded/cef The Chromium Embedded Framework (CEF) is a simple framewo ...
- CentOS LDAP安装配置
安装: Install the openldap, openldap-servers, and openldap-clients RPMs. Edit the /etc/openldap/slapd. ...
- Pro mvvm读书笔记mvvm中的VM
一.构建ViewModels 设计模式的其中一个目标就是抽象构造一个给出指定类型的对象或者实现指定类型的接口的过程.需要把类给客户端,让客户端去使用,但是要隐藏类是具体的实现细节. 1.1The Ap ...
- C语言 · s01串
算法训练 s01串 时间限制:1.0s 内存限制:256.0MB 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) ...
- 应用层timer_libc_posix timer
应用层除了通过setitimer/getitimer设置获取timer外,还可通过timer_create()等一系列函数实现应用层timer功能. 应用流程 The timers created b ...
- Java实现的各种排序算法(包括冒泡,快排等)
//堆排序 不稳定 import java.util.Arrays; public class HeapSort { public static void main(String[] args) { ...
- Yii-模型- criteria查找数据库方法
数据模型搜索方法: public function search() { // Warning: Please modify the following code to remove attribut ...