java 中多線程和鎖的使用以及獲取多線程執行結果 -开发者知识库

java 中多線程和鎖的使用以及獲取多線程執行結果 -开发者知识库,第1张

 多線程一:原生的寫法   關鍵詞 implements  實現  Runnable 類

run()  方法 

注意點 : 創建類的實例 InterfaceController inter=new InterfaceController();  的時候,不要放在循環中  , 如果放在循環中 run 方法中的lock  是起不到作用的,

正確寫法 看下面的例子 

 

@Controller
@RequestMapping("/interface")
public class InterfaceController implements Runnable{

private Lock lock = new ReentrantLock();
private List<LoaneePriorityModel> listPage;
int k = 1;
public void setlistPage(List<LoaneePriorityModel> listPage) 
{ 
this.listPage = listPage; 
} 

public void setk(int k) 
{ 
this.k = k; 
} 
private Lock lock2 = new ReentrantLock();
/* 類Runnable 的具體實現方法
* @see java.lang.Runnable#run()
*/
public void run(){
lock2.lock();
try{
if(k==1)
{
log.info(MessageFormat.format("k==1睡眠5秒:{0}",""));
Thread.sleep(5000);// 睡眠100毫秒
}    
List<LoaneePriorityModel> aa=listPage;
log.info(MessageFormat.format("輸出數據集條數:{0}", aa.size()));
}
catch(Exception ex)
{
log.info(MessageFormat.format("多線程異常信息:{0}",ex));    
}
finally{
lock2.unlock();    
}
}

@RequestMapping(value = "updateLoaneePriorityNew", method = RequestMethod.POST)
@ResponseBody
public int updateLoaneePriorityNew(HttpServletRequest request,
@RequestBody String requestBody) {

lock.lock();
try {
JSONArray json = JSONArray.fromObject(requestBody);
log.info(MessageFormat.format("更改借款工單優先級 ,接收到的josn字符串:{0}", json));
System.out.println(MessageFormat.format(
"更改借款工單優先級 ,接收到的josn字符串:{0}", json));
List<LoaneePriorityModel> persons = (List<LoaneePriorityModel>) JSONArray
.toCollection(json, LoaneePriorityModel.class);
InterfaceController inter=new InterfaceController();
for (int i = 0; i <= persons.size(); i  ) {
// 寫修改優先級的主體方法
int f=2; //定義每組的數量
if(i==f*k-1&&i!= persons.size())
{
log.info(MessageFormat.format("-----f*k等於:{0}", f*k));
listPage= persons.subList(0, f*k);

log.info(MessageFormat.format("輸入數據集條數:{0}", listPage.size()));
inter.setlistPage(listPage); 
inter.setk(k);
Thread t = new Thread(inter);
Thread.sleep(5000);// 睡眠100毫秒
t.start();    
k  ;
}
if(i== persons.size())
{
log.info(MessageFormat.format("=====f*(k-1)等於:{0}", f*(k-1)));
listPage= persons.subList(f*(k-1), persons.size());
//InterfaceController inter=new InterfaceController();
log.info(MessageFormat.format("輸入數據集條數:{0}", listPage.size()));
inter.setlistPage(listPage); 
Thread t = new Thread(inter);
inter.setk(k);
t.start();
k  ;    

}
}

} catch (Exception ex) {
log.info(MessageFormat.format("更改借款工單優先級 ,出現異常:{0}", ex));
System.out.println(MessageFormat.format("更改借款工單優先級 ,出現異常:{0}", ex));
} finally {
lock.unlock();
}
return k;
}

}

 

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复