小编Gau*_*wal的帖子

如何正确处理两个线程更新数据库中的同一行

我有一个线程调用T1读取平面文件并解析它.我需要创建一个新的线程,T2用于解析此文件的某些部分,稍后此T2线程需要更新原始实体的状态,原始线程也会对其进行解析和更新.T1如何处理这种情况?

我收到一个包含以下样本记录的平面文件:

AAAA
BBBB
AACC
BBCC
AADD
BBDD
Run Code Online (Sandbox Code Playgroud)

首先,此文件以Received状态保存在数据库中.现在所有以BBAA需要在单独的线程中处理的记录.一旦成功解析,两个线程都会尝试将数据库中此文件对象的状态更新为Parsed.在某些情况下,我得到了staleObjectException.编辑:在异常丢失之前,任何线程完成的工作.我们正在使用乐观锁定.避免这个问题的最佳方法是什么?

两个线程更新同一个对象时可能出现的hibernate异常?

上面的帖子有助于理解它的某些部分,但它无助于解决我的问题.

java database multithreading hibernate locking

18
推荐指数
1
解决办法
8305
查看次数

如何对水平分区数据进行排序

我有一个电信计费软件系统.其中包含用户呼叫的每日日志.日志按日期(月)水平分区.每个分区都存储在一个单独的数据库中,可以分布在多个实例上.

在UI中,用户将指定日期范围.返回的数据可以在任何字段上排序.日期范围可能跨越多个分区.应用程序必须支持通过日期范围的数据进行分页.

我无法将太多记录加载到内存中进行排序.在查询中放置排序只能在一个结果集中提供排序数据.

所以我需要对多个分区中的数据进行排序,每个分区都是单独排序的 如何从多个排序结果集中将已排序记录返回到UI?

编辑:经过对此问题的更多分析,我们有更多的输入.也需要分页.因此,我们需要找到一种方法来对多个结果集进行实时排序.

java sorting database-partitioning

10
推荐指数
1
解决办法
256
查看次数

Java StringBuilder可以容纳多少个字符?

StringBuilder是否具有JAVA中最大容量的字符限制.

StringBuilder url=new StringBuilder();

stmt = connnection.createStatement();
String sql="SOME QUERY";
rs = stmt.executeQuery(sql);
while(rs.next())
{
    String emailId=rs.getString("USER_EMAIL_ID");
     url.append(emailId);  
}
Run Code Online (Sandbox Code Playgroud)

StringBuilder变量'url'是否具有最大容量,还是可以容纳所有内容?

java stringbuilder jdk1.6 capacity

8
推荐指数
1
解决办法
9535
查看次数

Java中方法参数的线程安全性

我想知道在处理Java中的成员参数时,线程安全是否已经起作用.

假设您有一个API方法

boolean moreThanTen(long value) {
    if(value > 10) return true;
    else return false;
}
Run Code Online (Sandbox Code Playgroud)

这种方法是线程安全的吗?

我想它会因为每个线程都有自己的局部变量堆栈,而基元都存储在这个本地堆栈中.

唯一让我不确定的是,a long将是两个单独的读取,因此通常不是线程安全的.

我的问题是:我可以确定方法的参数是否以原子方式复制?因此,当使用原语作为参数(偶数float/ long)时,我可以确定在将其复制到局部变量时,线程安全性不会成为问题吗?

谢谢.

java concurrency multithreading parameter-passing

5
推荐指数
1
解决办法
649
查看次数

如何获得两个整数之间的差异

我正在尝试制作一个使用区域的程序,每个区域都有一个id(例如:1; 1),我试图通过比较两个id来获得指定区域的大小,但是这个方法返回1作为大小.

 //Pos1 = -2;3 Pos2 = 0;1
 int x = Integer.valueOf(pos2.x).compareTo(pos1.x);
 int y = Integer.valueOf(pos2.y).compareTo(pos1.y);
 int size = Math.abs(x * y);
Run Code Online (Sandbox Code Playgroud)

那我怎么能做这个呢?

java math compare

5
推荐指数
2
解决办法
3万
查看次数

内部锁定中AtomicInteger的用途是什么

在java.util.concurrent.LinkedBlockingQueue.put()方法的这一节中,我认为不需要AtomicInteger.考虑到lock()中只有一个线程.我对么?

putLock.lockInterruptibly();
    try {
        while (count.get() == capacity) {
            notFull.await();
        }
        enqueue(node);
        c = count.getAndIncrement();
        if (c + 1 < capacity)
            notFull.signal();
    } finally {
        putLock.unlock();
    }
Run Code Online (Sandbox Code Playgroud)

我查了很多问题,但找不到答案.我的问题:锁内只有一个线程,所以为什么要在这里使用AtomicInteger

concurrency multithreading atomic java-8

4
推荐指数
2
解决办法
108
查看次数