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";
		
	}
上次更新时间: 2024/5/7 05:59:02