欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Linux系统的线程探讨

程序员文章站 2022-03-26 21:37:12
...

昨天晚上一直到今天早上发生了一件很奇怪的事情!


个人手动写了一个关于微信公众号获取accesstoken的例子,获取的代码如下:

//获取accesstoken
public static String getAccessToken(){	
	try {
		return wxService.getAccessToken(false);//非强制刷新
	} catch (WxErrorException e) {
		e.printStackTrace();
		log.info("获取accesstoken失败!");
		return "";
	}
}

检验的代码如下:

public void run() {
	while (true) {
		try {	
			//判断accessToken是否有效
			Boolean Check = WeixinUtil.CheckAccessToken(getAccessToken(), testOpenId);//******打印出一个报错日志
			if (!Check) {//无效
				log.error("家长端accessToken失效,获取的AccessToken为:"+getAccessToken());
				if(tokenTimeRecord <= System.currentTimeMillis()){
					wxService.getAccessToken(true);//强制刷新
					tokenTimeRecord = System.currentTimeMillis() + 300000L;//未超过5分钟就不会刷新
				}
				Thread.sleep(10000L);
			}else{
				Thread.sleep(10000L);
			} 
		} catch (Exception e) {
			log.info("测试accesstoken线程出错了!");
			try {
				Thread.sleep(10000L);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
		}
	}
}

启动了这个线程以后,每隔5秒钟执行一次,同时在windows服务器上和Linux服务器上部署了两套代码。两个微信公众号的appid和appsecret都填写正确,但是输出的内容却不同。

以下为windows服务器下输出的日志:

关于Linux系统的线程探讨

访问没有任何返回值的日志是请求无结果,没有访问通。。。。不受什么影响。

然后接下来是Linux服务器的文件内容了:

关于Linux系统的线程探讨

访问失败:就是报微信公众号的40001错误,也就是accesstoken过时了。但是,每隔5分钟报一次,期间隔两秒钟还会输出两个文件出来,很奇怪了,难道Linux服务器的线程和Windows系统的线程,用java语言来定义有什么区别吗?