我有一个线程调用T1读取平面文件并解析它.我需要创建一个新的线程,T2用于解析此文件的某些部分,稍后此T2线程需要更新原始实体的状态,原始线程也会对其进行解析和更新.T1如何处理这种情况?
我收到一个包含以下样本记录的平面文件:
AAAA
BBBB
AACC
BBCC
AADD
BBDD
Run Code Online (Sandbox Code Playgroud)
首先,此文件以Received状态保存在数据库中.现在所有以BB或AA需要在单独的线程中处理的记录.一旦成功解析,两个线程都会尝试将数据库中此文件对象的状态更新为Parsed.在某些情况下,我得到了staleObjectException.编辑:在异常丢失之前,任何线程完成的工作.我们正在使用乐观锁定.避免这个问题的最佳方法是什么?
上面的帖子有助于理解它的某些部分,但它无助于解决我的问题.
我有一个电信计费软件系统.其中包含用户呼叫的每日日志.日志按日期(月)水平分区.每个分区都存储在一个单独的数据库中,可以分布在多个实例上.
在UI中,用户将指定日期范围.返回的数据可以在任何字段上排序.日期范围可能跨越多个分区.应用程序必须支持通过日期范围的数据进行分页.
我无法将太多记录加载到内存中进行排序.在查询中放置排序只能在一个结果集中提供排序数据.
所以我需要对多个分区中的数据进行排序,每个分区都是单独排序的 如何从多个排序结果集中将已排序记录返回到UI?
编辑:经过对此问题的更多分析,我们有更多的输入.也需要分页.因此,我们需要找到一种方法来对多个结果集进行实时排序.
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中的成员参数时,线程安全是否已经起作用.
假设您有一个API方法
boolean moreThanTen(long value) {
if(value > 10) return true;
else return false;
}
Run Code Online (Sandbox Code Playgroud)
这种方法是线程安全的吗?
我想它会因为每个线程都有自己的局部变量堆栈,而基元都存储在这个本地堆栈中.
唯一让我不确定的是,a long将是两个单独的读取,因此通常不是线程安全的.
我的问题是:我可以确定方法的参数是否以原子方式复制?因此,当使用原语作为参数(偶数float/ long)时,我可以确定在将其复制到局部变量时,线程安全性不会成为问题吗?
谢谢.
我正在尝试制作一个使用区域的程序,每个区域都有一个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.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