gpt4 book ai didi

java - 在 Java 中使用同步锁

转载 作者:行者123 更新时间:2023-11-30 06:36:06 25 4
gpt4 key购买 nike

我一直在搞乱 Java 中的同步,但它还没有为我工作。

我有两个用于创建独立线程的 Runnable 对象,每个对象都有一个共享 ArrayList 和一个共享对象(用于同步)的句柄。第一个 Runnable 始终读取数组列表中所有对象的 tsome 实例变量,第二个 Runnable 不断更新数组列表中所有对象的实例变量。

按照我现在的设置方式,两个 Runnable 对象都包含一个指向我打算用作锁的对象的指针。

可运行 1:

public void run() {
if (syncLock == null)
return;
synchronized (syncLock) {
try {
syncLock.wait();
} catch (InterruptedException e) {
}

for (int i = 0; i < list.size(); i++) {
drawItem(list.get(i));
}
syncLock.notify();
}
}

可运行 2:

public void run() {
if (syncLock == null)
return;
synchronized (syncLock) {
try {
syncLock.wait();
} catch (InterruptedException e) {
}

for (int i = 0; i < list.size(); i++) {
updateItem(list.get(i));
}
syncLock.notify();
}
}

所以从技术上讲,第一个 Runnable 总是在屏幕上绘制对象,第二个是根据时间变化计算项目的新位置。

有什么我想念的吗?

最佳答案

看起来你的两个线程都将启动并卡在 wait() 中,除非你有一些其他对象你不会在那里显示给 notify() 其中之一(只是为了启动它们。)您必须确保两个线程都在等待。

或者,您可以更改其中一个以先完成它们的工作,然后调用 notify(),然后调用 wait()。同样,您必须确保其他线程已经在等待。

关于java - 在 Java 中使用同步锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5214459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com