java中多线程有的时候需要给线程传递参数,
如通过客户端导入Excel到后台,后台解析Excel,这个时候可以使用多线程进行Excel的解析,
举例:springmvc 中在一个Controller中解析Excel或者其他文件,给前台返回一字符串:如解析中,稍后在XX里下载等。。。
@RequestMapping(value="parseFile",produces="application/json;charset=utf-8")
@ResponseBody
public String parseFile(@RequestParam("fileImport") CommonsMultipartFile fileImport,HttpServletRequest request) throws IOException{
String filename = fileImport.getOriginalFilename();
String fileType=filename.substring(filename.indexOf(".")+1, filename.length());
User user = (User)request.getSession().getAttribute("user");
InputStream ins =fileImport.getInputStream();
//异步执行解析Excel
class ParseThread extends Thread{
InputStream ins;
String fileType;
User user;
ParseThread(InputStream ins,User user,String fileType){
this.ins=ins;
this.user=user;
this.fileType=fileType;
}
@Override
public void run() {
// TODO Auto-generated method stub
FileTypeOprator.valueOf(fileType).parse(ins, user, netWordService);
}
}
ParseThread parse = new ParseThread(ins,user,fileType);
parse.start();
return JSONObject.toJSONString(ErrorInfo.EXCEL_ING);
}
如上文中,通过内部类的方式,将参数传递到线程里,然后对文件l进行解析,FileTypeOprator为枚举类,可以通过枚举,来对文件类型进行分类,避免if else增加代码可读性,
有此可以很容易的想到,通过类的方式来对线程进行传递参数,因为run()只是一个方法,因此,可以声明一个成员变量,来传递参数。
看到其他博客将这种方式总结成了两种方式:
一:通过构造函数传递参数,示例代码的方式
二:通过get或者set方法传递参数
如果是运行中的线程该怎么传递参数呢?
此篇不进行讨论