Java:用于编辑和更新的锁定
所以我的问题的要点是——我有一个扩展JPanel的类,它还有许多其他swing/awt组件。它正在显示数据库中的一些数据。它做了一些类似于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
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()
方法即可。谢谢你指出这一点