MySQL有一个方便的功能:
SELECT GET_LOCK("SomeName")
Run Code Online (Sandbox Code Playgroud)
这可用于为应用程序创建简单但非常具体的基于名称的锁.但是,它需要数据库连接.
我有很多情况,比如:
someMethod() {
// do stuff to user A for their data for feature X
}
Run Code Online (Sandbox Code Playgroud)
它没有意义的只是同步的这种方法,因为,例如,如果调用此方法对于在此期间用户B,用户B不需要等待用户A完成它开始之前,用户只能操作A和功能X组合需要等待.
使用MySql锁我可以做类似的事情:
someMethod() {
executeQuery("SELECT GET_LOCK('userA-featureX')")
// only locked for user A for their data for feature X
executeQuery("SELECT RELEASE_LOCK('userA-featureX')")
}
Run Code Online (Sandbox Code Playgroud)
由于Java锁定是基于对象的,因此我似乎需要创建一个新对象来表示此锁的情况,然后将其放在某个地方的静态缓存中,以便所有线程都可以看到它.锁定该情况的后续请求然后将锁定对象定位在高速缓存中并获取其锁定.我试图创建这样的东西,但锁缓存本身需要同步.此外,很难检测何时不再使用锁定对象,以便可以从缓存中删除锁定对象.
我查看了Java并发软件包,但没有什么能够处理这样的事情.有没有一种简单的方法来实现这一点,还是我从错误的角度看待这个?
编辑:
为了澄清,我不打算提前创建一个预定义的锁池,我想按需创建它们.我想的一些伪代码是:
LockManager.acquireLock(String name) {
Lock lock;
synchronized (map) {
lock = map.get(name);
// doesn't exist yet - create and store
if(lock == null) {
lock = new Lock();
map.put(name, lock);
}
}
lock.lock();
}
LockManager.releaseLock(String name) …Run Code Online (Sandbox Code Playgroud) 目前我正在尝试返回一个公开的XML资源,但是当我使用var_dump($resource)它返回时string(4390) " ".
我使用CURL来检索资源,并成功返回其他资源.那里有明显的东西(你可以看到有4390个字符!)但它没有成功返回.
我试过包装它utf8_encode虽然这没有任何区别.
我也尝试使用print_r和<pre>标签返回它虽然这也没有返回任何东西.
这里的任何帮助都会很棒!
我想稍微修改PHP date()函数,以便它识别英国6位数字格式的dd/mm/yy或dd-mm-yy.可以理解的是,它会认为这种形式的日期是国际(yy-mm-dd)格式.
我仍然希望将它传递给日期函数,因为这将允许它识别其他格式,但由于我在英国,所以人们很可能会将其置于英国格式.
有任何想法吗?我怀疑Regex参与了解决这个问题的方法......
使用下面答案中的部分,这就是我在dd/mm/yy的情况下能够改变它的方式:
$s_date = str_replace('/', '-', $s_date);
preg_match('^(.*)[-](.*)[-](.*)$^', $s_date, $matches);
if ($matches) {
if (strlen($matches[3]) == 2) {
$matches[3] = '20'.$matches[3];
}
$s_date = $matches[1].'-'.$matches[2].'-'.$matches[3];
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在速记嵌套循环中添加满足条件的所有内容?我的以下尝试未成功:
count += 1 if n == fresh for n in buckets['actual'][e] else 0
Run Code Online (Sandbox Code Playgroud) 可能重复:反
序列化问题
我有一个字符串形式:
a:16:{i:0;s:3:"696";i:1;s:3:"698";i:2;s:3:"690";}"
Run Code Online (Sandbox Code Playgroud)
我正在考虑将其转回数组,以便它将遵循:
array(16) {
0 => 696,
1 => 698,
2 => 690
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何做到这一点?
谢谢