我遇到了这样的逻辑,即有人在今天的工作中实现了,并且以这种方式创建锁是错误的.你们有更好的解决方案吗?不在myObj上使用synchronized块的问题是它可以为null.还有其他建议吗?
public class myClass {
private Object myObj;
private Object lock = new Object();
public void method1() {
synchronized( lock ) {
// has logic to read myObj
}
}
public void method2() {
synchronized( lock ) {
// has logic to update myObj
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在从Java 6迁移到Java 8,并注意到Comparator接口特有的一些东西.对此的任何见解都会非常有帮助.
当我切换到Java 8时,对象的顺序在"compare"方法内切换,列表排序失败.我回到java 6,它工作得很好.这是一个测试用例,使用Java 8失败了,并且使用了Java 6.
public class ComparitorTest {
@Test
public void comparatorTest(){
Record record1 = new Record("First", false);
Record record2 = new Record("Second", true);
List<Record> list = new ArrayList<Record>();
list.add(record1);
list.add(record2);
final Comparator<Object> recordComparator = new Comparator<Object>()
{
public int compare( Object o1, Object o2 )
{
Record r1 = (Record) o1;
Record r2 = (Record) o2;
Boolean isReadonly_R1 = r1.getIsReadOnly();
Boolean isReadOnly_R2 = r2.getIsReadOnly();
if( isReadonly_R1.equals( Boolean.TRUE ) )
{
return 0;
}
else
{ …Run Code Online (Sandbox Code Playgroud)