java 注意线程下的 异常捕获,会跳过sleep(10000)休眠,可能会出现死循环-阿里云开发者社区

开发者社区> lhyxcxy> 正文

java 注意线程下的 异常捕获,会跳过sleep(10000)休眠,可能会出现死循环

简介: 线程 (1)在catch(){} 中的语句要保证不会出现异常,或者catch中的语句再次捕获了异常,    (2) 线程中try中的语句出现异常,会直接跳过try中的sleep,导致不停地循环   (3)线程的while循环中如果不适用try catch 会导致当出现异常时,线程直接挂掉, package com.hlzt.wx.thread; import java.util
+关注继续查看

线程

(1)在catch(){} 中的语句要保证不会出现异常,或者catch中的语句再次捕获了异常,

   (2) 线程中try中的语句出现异常,会直接跳过try中的sleep,导致不停地循环

  (3)线程的while循环中如果不适用try catch 会导致当出现异常时,线程直接挂掉,

package com.hlzt.wx.thread;

import java.util.Date;

import net.sf.json.JSONObject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;

import com.hlzt.wx.model.global.WXGlobalVar;
import com.hlzt.wx.model.js_sdk.JsapiTicket;
import com.hlzt.wx.model.token.GlobalToken;
import com.hlzt.wx.util.token.GlobalAccessTokenUtils;

/**
 * 全局access_token 定时刷新类
 * 
 * @author Administrator
 * 
 */
public class GlobalAccessTokenThread extends Thread {
	static Logger logger = LoggerFactory
			.getLogger(GlobalAccessTokenThread.class);

	@Override
	public void run() {
		logger.info("################启动定时刷新token,刷新间隔时间为token超时时间的1/2");
		// TODO Auto-generated method stub
		refreshToken();
	}

	public void refreshToken() {
         
	
			
		while (true) {
			try {
				String token=GlobalAccessTokenUtils.setAndGetAccessToken();

		
					Thread.sleep(3600000);// 否则按半小时刷新
				    logger.info("###################"+3600000/1000+"s后重新刷新access_token");

			} catch (Exception e) {//<span style="color:#ff0000;">此处捕获异常,当<span style="font-family: Arial, Helvetica, sans-serif;">GlobalAccessTokenUtils.setAndGetAccessToken()方法出现异常,就会跳过sleep(),成为死循环</span></span>
<span style="font-family:Arial, Helvetica, sans-serif;color:#ff0000;">                                                                                               //但是当不捕获异常,即不用try catch 时,当出现异常时,此线程就会挂掉,不会再循环,所以线程中要捕获异常
</span>
				e.printStackTrace();
				// TODO Auto-generated catch block
				logger.info("###################获取access_token异常");
			}
		}
	}
}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
AsyncHttpClient放在子线程执行时抛出异常的解决方法
AsyncHttpClient放在子线程执行时抛出异常的解决方法
41 0
并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环
背景 大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码: static int flag = -1; void thread1(){ ...
972 0
java如何跳出for循环?
java跳出for循环的方法 break continue return break语句 break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。
8374 0
《Java程序员面试秘笈》—— 1.9 线程中不可控异常的处理
首先,它查找线程对象的未捕获异常处理器。如果找不到,JVM继续查找线程对象所在的线程组(ThreadGroup)的未捕获异常处理器,这将在“线程组中不可控异常的处理”一节中讲解。如果还是找不到,如同本节所讲的,JVM将继续查找默认的未捕获异常处理器。
1505 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
10785 0
线程异常:undefined reference to &#39;pthread_create&#39; 处理
源码: #include &lt;stdio.h&gt; #include &lt;pthread.h&gt; #include &lt;sched.h&gt; void *producter_f (void *arg); void *consumer_f (void *arg); int buffer_has_item=0; pthread_mutex_t mutex;
1399 0
Java多线程核心技术(六)线程组与线程异常
本文应注重掌握如下知识点: 线程组的使用 如何切换线程状态 SimpleDataFormat 类与多线程的解决办法 如何处理线程的异常
2674 0
如何捕获java线程中的逃逸的异常
在java线程中,在run方法中,我们要在run()方法中,把一切的异常有处理掉,也就try-catch掉。不能让这个线程抛出异常,因为如果我们不使用特殊的方式的话,我们是无法捕获从这个线程中逃逸的异常的。异常一旦抛出了,那么这个线程就会停止运行,但是不会影响主线程和其它的线程。因为主线程和其它的线程都不知道它抛出了异常。 线程在run方法抛出异常,没有catch
3431 0
+关注
lhyxcxy
专注于前后端服务器交互,人工智能,NLP领域
413
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载