Java:用于编辑和更新的锁定

Java:用于编辑和更新的锁定,java,multithreading,concurrency,locking,Java,Multithreading,Concurrency,Locking,所以我的问题的要点是——我有一个扩展JPanel的类,它还有许多其他swing/awt组件。它正在显示数据库中的一些数据。它做了一些类似于 public class DataPanel extends JPanel { Lock lock; public DataPanel() { lock = new Reenntractlock(); //init } public void update() { if(!lock.trylock())return; //do update

所以我的问题的要点是——我有一个扩展JPanel的类,它还有许多其他swing/awt组件。它正在显示数据库中的一些数据。它做了一些类似于

public class DataPanel extends JPanel
{
Lock lock;

public DataPanel()
{
lock = new Reenntractlock();
//init
}
public void update()
{
    if(!lock.trylock())return;
    //do update

    lock.unlock();
}
public void edit()
{
    lock.lock();
    //etc etc
    commit();
}
public void commit()
{
    //etc etc;

    lock.unlock();
}
}
我有一个事件监听器,每当点击一个按钮,它就会调用edit。单击另一个按钮时,它将调用提交。计时器计划程序(计时器类)将定期调用更新方法

我想要完成的

(1) 使更新和编辑/提交相互排斥。不允许同时更新或编辑/提交。 (2) 让更新操作推迟到用户停止编辑/提交

我的问题

(1) 这是正确的吗?它会做我想做的吗?我测试了一下,看起来不错,但我不确定。(2) 有没有更好的方法来实现这一点


编辑:代码已更新

您无需锁定锁即可锁定它。您应该在对象(不是锁)上使用
synchronized
,或者使用Lock API,但不能两者都使用。您没有正确使用
ReentrantLock
对象,您不需要对其进行
synchronized
,只需调用
Lock()
unlock()
方法即可。谢谢你指出这一点