java線程傳輸參數的方法

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方法傳遞參數

如果是運行中的線程該怎麼傳遞參數呢? 

此篇不進行討論


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章