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