Java 线程 学习收集

收集大神讲解一资料:https://www.cnblogs.com/yjd_hycf_space/p/7526608.html

大神讲解二:https://www.cnblogs.com/lwbqqyumidi/p/3804883.html

大神讲解三:https://blog.csdn.net/jingzhi1230/article/details/80432008

大神四:https://blog.csdn.net/fang323619/article/details/73904351

https://www.cnblogs.com/snow-flower/p/6114765.html

验证码:https://www.cnblogs.com/AdamFamily/p/6379676.html

验证码:https://blog.csdn.net/pengmm1990/article/details/70158437

https://blog.csdn.net/ysk_xh_521/article/details/77530292

https://blog.csdn.net/qq_35572020/article/details/53033203

利用ThreadLocal保存登录Session信息

https://blog.csdn.net/Tongdao/article/details/81145400

https://blog.csdn.net/m0_37034294/article/details/80819150

c# 在C#中主线程和子线程如何实现互相传递数据https://blog.csdn.net/linshichen/article/details/52188613

每条线程都有属于自己的一个session实例https://blog.csdn.net/weixin_42158320/article/details/80520517

spring新线程中注入为空指针的问题https://blog.csdn.net/u010127245/article/details/51150812

https://blog.csdn.net/qq_38632641/article/details/82910775

https://blog.csdn.net/u010107350/article/details/50347925

http://blog.sina.com.cn/s/blog_5a15b7d10102v6ki.html

线程空指针工具类:https://blog.csdn.net/henry_chatter/article/details/77499055

https://blog.csdn.net/matthewwu/article/details/80922434

https://blog.csdn.net/u010107350/article/details/50347925

最终解决在线程类注入空指针中:定义JavaBean 为static 利用set @Resource属性初始化:

package com.business;

import java.security.Key;
import java.util.Map;
import java.util.concurrent.Callable;

import javax.annotation.Resource;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;

import com.common.EncodeUtilHelp;
import com.common.Md5UtilHelp;
import com.cxytiandi.encrypt.util.AesEncryptUtils;
import com.cxytiandi.encrypt.util.RsaEncryptUtils;
import com.entity.LoginInfo;
import com.entity.ManagerInfo;
import com.entity.ManagerSettingInfo;
import com.service.LoginService;

@Service
public class KeepLoginInfo implements Callable<LoginInfo> {
	private static final Logger logger=LogManager.getLogger(KeepLoginInfo.class);
    private static LoginService loginService;
	private ManagerInfo managerInfo;
	private ManagerSettingInfo settingInfo;
	public KeepLoginInfo(ManagerInfo managerInfo,ManagerSettingInfo settingInfo) {
		this.managerInfo=managerInfo;
		this.settingInfo=settingInfo;
	}
	public KeepLoginInfo() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public LoginInfo call()throws Exception{
		var loginInfo=keepInfo();
		return loginInfo;
	}
	
	/**
	 * 存储登录信息
	 * @return
	 */
	public LoginInfo keepInfo() {
		logger.info("子线程启动:准备处理登录信息");
		LoginInfo loginInfo=new LoginInfo();
		try {
			var roleInfo = loginService.getRoles(settingInfo.getFSetingInfo().getRoId());
			System.out.print("\r\n子线程中的查询:" + roleInfo.getName());
			// 签名生成 用户ID+x+用户名进行MD5加密
			String waitEncryptToken = settingInfo.getFSetingInfo().getAdId() + "x"
					+ EncodeUtilHelp.encryptTool(managerInfo.getNickName());
			Map<String, Key> kMap = RsaEncryptUtils.initKey();
			String privateKey = RsaEncryptUtils.getPrivateKey(kMap);
			//String publicKey = RsaEncryptUtils.getPublicKey(kMap);
			String signs = RsaEncryptUtils.sign(waitEncryptToken.getBytes(),privateKey);
			String token=Md5UtilHelp.getMD5String(signs);
			loginInfo.setAdminNum(AesEncryptUtils
					.EncryptAll(EncodeUtilHelp.decryptTool(settingInfo.getFSetingInfo().getAdId())));
			loginInfo.setToken(AesEncryptUtils.EncryptAll(token));
			loginInfo.setUserName(AesEncryptUtils.EncryptAll(managerInfo.getNickName()));
			loginInfo.setRoleName(AesEncryptUtils.EncryptAll(roleInfo.getName()));
			loginInfo.setuserRole(AesEncryptUtils.EncryptAll(roleInfo.getSweights()));
			
//			System.out.print("等待签名字符串+waitEncryptToken:"+waitEncryptToken);
//			System.out.print("\r\nmd5加密字符Token:"+token);
//			System.out.print("\r\n是不是Md5:"+Md5UtilHelp.isEqualsToMd5(signs,token));
			//System.out.print("\r\n签名:" + signs);
//			System.out.print("\r\n是否是合格的签名:" + RsaEncryptUtils.verify(waitEncryptToken.getBytes(), publicKey, signs));
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
//			prompt.setCode(7);
//			prompt.setMessage("签名生成失败!");
//			prompt.setDatas(null);
			System.out.print("\r\n子线程出错");
		}
		logger.info("子线程处理完毕,准备交给主线程结果!");
		return loginInfo;
	} 
    
	@Resource
    public void setServiceBean(LoginService loginService) {    
		KeepLoginInfo.loginService = loginService;    
    }
}

https://www.bbsmax.com/A/ke5j6Xkj5r/

参才大神:https://blog.csdn.net/matthewwu/article/details/80922434

java用多线程批次查询大量数据(Callable返回数据)方式

https://blog.csdn.net/dfBeautifulLive/article/details/82788830

Java多线程之Callable接口的实现

https://www.cnblogs.com/baizhanshi/p/6425209.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值