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方法傳遞參數
如果是運行中的線程該怎麼傳遞參數呢?
此篇不進行討論