java线程锁问题

发布网友 发布时间:2022-04-22 03:10

我来回答

5个回答

热心网友 时间:2023-09-08 02:52

t.start();只是表示t这个线程进入了就绪队列,要轮到它享有cpu资源时,才开始!
上面的两个线程分别运行了两个不同的被锁定的方法, ,一个方法使用关键字synchronized修饰后,但一个线程A使用这个方法时,其他线程想使用这个方法就必须等待,知道线程A使用完该方法

热心网友 时间:2023-09-08 02:53

Thread t = new Thread(tt);
t.start();
tt.m2();

大概的运行过程:

当前线程, 线程t
|
V
t.start() -> t.run() 此时t只是有可能执行,未必能够运行。
| |
V |
tt.m2() ...
| |
V V
t.m1()

所以,一般情况下是m2先执行完,再执行m1方法。
但是有些情况下也会m1,后m2. 多执行几次。可能会出现

热心网友 时间:2023-09-08 02:53

如果你A中的两个方法都对同一个对象加了锁,那当线程1调用第一个方法时,必须等他执行完
第2个线程才能执行!因为第二个线程调用第二个方法,但第二个方法要用到的那个对象却被第一个线程锁着在,所以只有等待!如果你A中的两个方法不是对同一个对象加了锁,那就无所谓了,因为他们用到的对象不同!

热心网友 时间:2023-09-08 02:54

同步块和同步方法琐this是一样的。
你要清楚的是,你需要锁的是哪个对象。
要真正锁的应该是不同步的话,状态会不一致的对象。

热心网友 时间:2023-09-08 02:54

使用同步块的方法吧
public static void method()
{
synchronized(StaticSyncBlock.class)
{
//xml操作
………………
//操作结束,注意xml左右操作必须放在这个同步块里
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com