黑马程序员技术交流社区

标题: this关键字 [打印本页]

作者: CrazyProgram    时间: 2013-4-24 16:49
标题: this关键字
本帖最后由 CrazyProgram 于 2013-4-26 20:11 编辑
  1. package zhiwei.deng.web.listener;

  2. import java.util.HashMap;
  3. import java.util.Map;

  4. import javax.servlet.ServletRequestEvent;
  5. import javax.servlet.ServletRequestListener;
  6. import javax.servlet.http.HttpServletRequest;

  7. public class VisitorListener implements ServletRequestListener {
  8. private int num;
  9. private static Map<String,String> map = new HashMap<String,String>();
  10. static{
  11. map.put("127.0.0.1", "中国北京");
  12. }

  13. public void requestInitialized(ServletRequestEvent sre) {
  14. //锁住大家共享的东西
  15. synchronized(this){//这个this代表的是什么,我打印了这个类的hashcode还想不是他~给个答案谢谢
  16. num++;
  17. }
  18. HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
  19. //设置得到ip
  20. String ip = request.getRemoteAddr();
  21. request.setAttribute("ip", ip);
  22. //设置得到地址
  23. String address = map.get(ip);
  24. if(address==null){
  25. address = "中国深圳";
  26. }
  27. request.setAttribute("address", address);
  28. }
  29. public void requestDestroyed(ServletRequestEvent sre) {

  30. }

  31. }
复制代码
很久没想这个问题了,今天突然发现有点不对。。求解释
19行不理解的地方在那
作者: 陈湘林    时间: 2013-4-24 17:01
this关键字
this就代表了本身这个类
作者: JavaUtil    时间: 2013-4-24 17:09
这里的this就代表这个类对象本身。
因为他前面用了synchronized,所以这个对象在进行方法块内的运算时别人是不能拿到的。确保了线程间的安全性。
作者: harborbest    时间: 2013-4-24 17:14
多线程的同步锁通过synchronized实现有俩种方式 一种是在代码块加锁,代码块加锁时可以指定任意类的实例过的对象即锁在这个对象上(任何对象都有一个锁)使同一时间内只有一个线程可以访问到代码块中。另外一种就是以synchronized关键字修饰方法这时加锁的对象就是类本身的实例 即this。而你此处的this其实就是你这个类本身的实例对象。
作者: CrazyProgram    时间: 2013-4-24 20:46
harborbest 发表于 2013-4-24 17:14
多线程的同步锁通过synchronized实现有俩种方式 一种是在代码块加锁,代码块加锁时可以指定任意类的实例过 ...

VisitorListener.class.hashcode();这个跟this.hashcode()不是一样的,,为什么?
作者: harborbest    时间: 2013-4-24 21:03
CrazyProgram 发表于 2013-4-24 20:46
VisitorListener.class.hashcode();这个跟this.hashcode()不是一样的,,为什么?

VisitorListener.class这是一个字节码对象,而this代表的是你当前的对象,一个类只能有一个字节码类对象,但是可以new()很多个对象。this是你现在的对象!所以hashcode()肯定不一样,个人理解!希望指正!
作者: 刘学明       时间: 2013-4-24 22:26
这里的this代表的当前对象   哪个对象执行此语句就是哪个对象  和其它语句中的this用法是一样的  
作者: 朱德帅    时间: 2013-4-24 22:32
this代表调用requestInitialized这个方法的对象。
作者: 蔚蓝小嗨    时间: 2013-4-24 23:21
synchronized用于解决多线程的安全问题,格式synchronized(对象){} ,这个对象可以使任意的。函数需要被对象调用,那么函数都有一个所属对象引用,就是this
作者: 白飞金    时间: 2013-4-26 19:39
this:看上去,是用于区分局部变量和成员变量同名情况。代表本类的对象,this代表它所在函数所属对象的引用。简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了了本类对象,都用this表示。
synchronized中的this是使线程同步,保证多线程操作数据的唯一性。
作者: 袁梦希    时间: 2013-4-26 19:41
楼主如果明白了,把帖子的类型改为“已解决” {:soso_e181:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2