关于同步的问题 2,“多线程时,会不会出现一个判断str == null跳出,另一个再判断str == null”不会因为对象已经加锁了,只有当一个线程执行完代码块中的所有代码,另外一个线程才可能进入 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加锁?不是这种叫法吧:)多线程的到此就要排队执行了,所以不会存在你说的那种问题~synchronized(a){ 如果另一个线程调用不同的方法改变str的值,好像采用同步的方法没有用处?例如下面代码:A a = new A();第一个线程:synchronized(a){ if (a.str == null) { a.str = new String(); }else{ a.str = str+"abc"; }}第二个线程a.str = str+"cde";Class A{ String str;} synchronized(a){}中的语句都是原子性的,也就当一个线程执行到synchronized(a){}中时,是不会被打断的而去执行另一个线程的。如果你的第二个线程不是使用synchronized(a){}来改变a的内容的,那当然就没有同步的意义了。或是你在Class A中定义synchronized的方法,外部只能通过这个方法来改变a的属性,那么a就是互斥的了。 Class.forName()和静态代码块的问题 css处理事件!!! com.sun.tools.javac.Main 编译莫名的警告:编码 utf-8 的不可映射字符(文件是utf-8的) 关于java编写SQL2000数据库的问题 关于SWT中combo的数据设置问题 在线等答复,谢了! 关于增加MouseListener()接口的问题 如何在网页中有选择性的加载applet 坦克大战问题 马上面试,怎么办?请指教! 请问关于Runtime的exec 电脑里可以安装两个jdk版本吗如1.3与1.4
多线程的到此就要排队执行了,所以不会存在你说的那种问题~
synchronized(a){
例如下面代码:A a = new A();
第一个线程:
synchronized(a){
if (a.str == null) {
a.str = new String();
}else{
a.str = str+"abc";
}
}
第二个线程
a.str = str+"cde";Class A{
String str;
}
也就当一个线程执行到synchronized(a){}中时,是不会被
打断的而去执行另一个线程的。如果你的第二个线程不是使用synchronized(a){}
来改变a的内容的,那当然就没有同步的意义了。
或是你在Class A中定义synchronized的方法,外部只能通过这个方法来
改变a的属性,那么a就是互斥的了。