java对于synchronized疑惑点? synchronized java

3020℃ RITA

java对于synchronized疑惑点?synchronized java

Java:关于Java编程思想中对synchronized的描述有写疑惑

简单说synchronized是加锁,打个比方如果一个门有一个锁那么只有有钥匙的人才能通过,多个对象就相当于多个门多个锁,那么就不能控制同时只有一个人通过了。

Java中synchronized的疑惑(System.out.println对输出结果的影响).

你的synchronized加在线程的代码里,你要锁应该要把代码放到主线程中

这样,你每new一个Thread,它都持有这个synchronized 的m1方法,并没有其它线程去调用

线程都是调用自己的synchronized 方法,不知道你明白了没有

如果你想加锁,应该把synchronized 写到外部去,或者加上static

关于JAVA中synchronized关键字的问题

展开全部

1。这个程序的执行结果不确定,我测试的时候单步调试和直接运行结果就不一样。因为主线程的优先级略高,主线程先调用m2,并且获得了TT对象的同步锁(此时t线程在排队等待调用m1),m2返回之后m1立即执行导致一瞬间b从2000变成了1000然后在主线程中打印出来1000,最后m1执行结束后打印出b = 1000。

(如果你在方法m2中第一句加上System.out.println("in m2"); 在m1中加上System.out.println("in m1");)会看到不一样的结果。。。

2。synchronized起到的作用是当一个线程调用synchronized方法时,其他线程只能排队等候。

3。如果没有这个关键字就没有上面的效果。

4。b不锁定,所有可能访问类成员变量的方法均被声明为 synchronized 才能保证一个成员变量不被多个线程同时修改,导致出错。

5。在他sleep的时候 ,不会释放锁,所以不可能有线程调用m2,除非去掉synchronized 。

这个例子是马士兵讲的吧?我感觉这个例子并不好(因为那个时间缝隙的问题。)

当时我看的时候也用了好长时间去分析。。

你可以试试在各个位置加上System.out.println( );来测试

Java 多线程问题 synchronized(obj)的疑惑

你把他们放在 synchronized(c) 之外了,怎么可能锁住呢。

synchronized(obj) 是同步代码锁,意思是最多只有一个线程可以运行此代码块。

不要将线程与函数弄混了。

两个线程可以同时运行同一个对象的函数,但不能同时使用被锁住的代码块。

希望这些帮助你明白过来

TAG: 疑惑