我发现正在使用的Java应用程序中使用MariaDB的GET_LOCK(‘lockname’, 0)

超时值在此处用作0。我想,它应该以非阻塞方式工作。但是,在日志文件中遇到一些异常之后,我有一种印象,即它仍在尝试使用默认超时时间来获取锁。在IS_FREE_LOCK(‘lockname’)调用之前应用GET_LOCK调用可使应用程序平稳运行。

我的问题是,在这里使用0作为超时值会有什么影响?

最佳答案

您确定超时了吗?我无法从命令行重现该问题:

第一场:

MariaDB [(none)]> SELECT GET_LOCK('lock1', 10);
+-----------------------+
| GET_LOCK('lock1', 10) |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.000 sec)


第二场:

MariaDB [(none)]> SELECT GET_LOCK('lock1', 0.5);
+------------------------+
| GET_LOCK('lock1', 0.5) |
+------------------------+
|                      0 |
+------------------------+
1 row in set (0.500 sec)

MariaDB [(none)]> SELECT GET_LOCK('lock1', 0);
+----------------------+
| GET_LOCK('lock1', 0) |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.000 sec)

09-11 20:26