我需要一个不可重入的ReadWriteLock,因为锁可能会被一个不同于获取它的线程释放.(当我开始间歇性地获得IllegalMonitorStateException时,我意识到了这一点.)
我不确定非重入是否是正确的术语.ReentrantLock允许当前持有的线程锁定以再次获取它.我不想要这种行为,因此我称之为"不可重入".
上下文是我有一个使用线程池的套接字服务器.每个连接没有线程.请求可能由不同的线程处理.客户端连接可能需要锁定一个请求并在另一个请求中解锁.由于请求可能由不同的线程处理,我需要能够在不同的线程中锁定和解锁.
假设为了这个问题,我需要保持这种配置,并且我确实需要锁定和解锁不同的请求,因此可能是不同的线程.
这是一个ReadWriteLock,因为我需要允许多个"读者"或一个独家"作家".
看起来这可以使用AbstractQueuedSynchronizer编写,但我担心如果我自己编写它会犯一些微妙的错误.我可以找到使用AbstractQueuedSynchronizer而不是ReadWriteLock的各种示例.
我可以使用OpenJDK ReentrantReadWriteLock源并尝试删除可重入部分,但我再次害怕我不会理解它.
我看过Guava和Apache Commons但没找到合适的东西.Apache Commons有RWLockManager可能会做我需要的但我不确定它似乎比我需要的更复杂.
从Eclipse我可以轻松地在我的应用程序中运行所有JUnit测试.
我希望能够在没有Eclipse(或Ant或Maven或任何其他开发工具)的情况下从应用程序jar运行目标系统上的测试.
我可以看到如何从命令行运行特定的测试或套件.
我可以手动创建一个列出我的应用程序中的所有测试的套件,但这似乎容易出错 - 我确信在某些时候我会创建一个测试而忘记将它添加到套件中.
Eclipse JUnit插件有一个创建测试套件的向导,但由于某种原因,它没有"看到"我的测试类.它可能正在寻找JUnit 3测试,而不是JUnit 4注释测试.
我可以编写一个工具,通过扫描源文件自动创建套件.
或者我可以编写代码,以便应用程序扫描它自己的jar文件进行测试(通过命名约定或查找@Test注释).
似乎应该有一个更简单的方法.我错过了什么?
我刚开始使用新的Eclipse 4.2(Juno)Null Analysis.
在这样的代码:
x = foo();
if (x == null)
fail("x is null");
return x.bar();
Run Code Online (Sandbox Code Playgroud)
我收到的警告是x可能为空.但它不可能,因为失败总是抛出,因此永远不会回来.(通过更好的程序间分析,它可能会自动确定,但目前似乎没有.)
显然,有一些方法可以重写代码以绕过警告,但我想要的是一种表示失败的方法(例如注释)永远不会返回.
我也尝试使用@SuppressWarnings("null")来抑制警告,但这不起作用.
摆脱警告的一种方法是添加:( assert x != null;假设您已打开设置以在null分析中包含断言)
在GCC C++中我可以做到: void fn __attribute__ ((noreturn))
如果输入是交互式的,即从控制台输入,我想打印命令提示符,例如">"
但如果它被重定向,例如从文件中重定向,那么我不想提示.
System.in是一个抽象的InputStream,似乎没有任何方法.
如果具体类型不同,也许你可以使用instanceof?
同样,如果将System.out重定向到文件,我也不想提示
如果您有以下代码: func MyFunc(a int, b int)
gofmt重写规则可以将其更改为: func MyFunc(a, b int)
我试过了: gofmt -r "f(x t, y t) -> f(x, y t)" myfile.go
但我得到: parsing pattern f(x t, y t) at 1:5: expected ')', found 'IDENT' t
我也尝试过: gofmt -r "f(x int, y int) -> f(x, y int)" myfile.go
但它为int而不是t提供了类似的错误
我已经阅读了gofmt文档.网络搜索没有任何帮助.
我故意使用单个字符标识符来匹配表达式.
我怀疑问题可能在于尝试匹配类型,因为它可能不被视为"表达"
是否可以使用gofmt执行此操作?