synchronized
/**
* jmeter压力测试 synr 使用查询的对象是否有效
* @return
* @throws InterruptedException
* 结论:
* 锁对象 是否生效
* id 否
* user 否
* this 是
* Test.class 是
* "lock" 是
* 静态方法 是
*
* 多线程并发的情况下,使用类对象或者字符串常量都是唯一的。线程能够等待执行,
* 使用传人的参数或者查询出来的对象不可以。哪怕声明对象在为私有,静态都没用。因为查出来的都是一个新的对象。
* 使用静态方法也可以。
*/
@RequestMapping("/syn")
public void User(String id) throws InterruptedException{
Thread.sleep(2000);
System.out.println(id);
com.tgb.model.User user = userService.findById(Integer.parseInt(id));
synchronized (user) {
Thread.sleep(2000);
System.out.println("调用了该接口");
}
}
private synchronized static void shuchu() throws InterruptedException {
Thread.sleep(2000);
System.out.println("调用了该接口");
}
@RequestMapping("/exception")
@ExceptionHandler
public String exceptionTest(String id, Exception ex, HttpServletRequest request) {
User findById = userService.findById(Integer.parseInt(id));
System.out.println(" --------------" + findById.getUserName() + "-------- " + findById.getAge());
request.setAttribute("exp", ex.getMessage());
return "error_all";
}