关于线程同步的问题 在什么时候要在方法之前加“synchronized”,还有看了线程同步,对这个概念还是有点搞不懂。希望能解释一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 synchronized一般来说是多线程可能同时访问共享资源的时候使用。相当对访问共享资源的代码加上锁。这样每次就只允许一个线程进入。不过线程同步是很复杂的,很多要注意的细节,期望在这里有人三言两语给你解析得清清楚楚,不如找本好书看看。 在某个对象的所有synchronized方法中,在某个时刻,只能有唯一的一个线程去访问这些synchronized方法. synchronized{ **********}括号里面的内容在同一时间只能允许一个线程去访问,这样就保证了多线程不会造成共享数据的不一致 楼上说得不全对,应该说是所有非静态的方法。其实java对与每个对象都有一把锁。synchronized这个关键字就是用来获得这把锁的。情况大概可以分三类:1. synchronized用在非静态成员函数上,获得this这个对象的锁。所以其他线程不能再调用“这个”对象的所有synchronized方法。2. synchronized用在静态成员函数上,获得是当前类的Class对象。由于在JVM中,没个类的Class对象是唯一的,所以其他线程不能再调用这个类“所有”对象的所有synchronized方法。3. synchronized语句块。对于这种情况,就看你自己怎么去设定要获得什么锁。例如synchronized(this){} 就和第一仲情况差不多,synchronized(ClassName.class){}这样就和第二种情况类似。 论面向对象之死,注定了失败的道路 求助:java如何提取自己想要的数据 jtree的节点显示 怎样做一个模式窗体 Frame问题,麻烦各位了! 简单的怪问题,请高手解释一下原因 JAVA连接SQL Server的问题,小妹拜求高手指教,小妹先谢过了!!!!!!!! java性能检测问题 急问:java.sql.SQLException: ORA-01000: maximum open cursors exceeded 请帮我看看这个读写注册表的问题 发一个INI文件处理类. 个人写的 将硬盘中的文档数据,一次性读入内存
**********
}
括号里面的内容在同一时间只能允许一个线程去访问,这样就保证了多线程不会造成共享数据的不一致
情况大概可以分三类:
1. synchronized用在非静态成员函数上,获得this这个对象的锁。所以其他线程不能再调用“这个”对象的所有synchronized方法。
2. synchronized用在静态成员函数上,获得是当前类的Class对象。由于在JVM中,没个类的Class对象是唯一的,所以其他线程不能再调用这个类“所有”对象的所有synchronized方法。
3. synchronized语句块。对于这种情况,就看你自己怎么去设定要获得什么锁。
例如synchronized(this){} 就和第一仲情况差不多,synchronized(ClassName.class){}这样就和第二种情况类似。