jjzjj

Concurrent

全部标签

MySQL 事务 : multiple concurrent transactions and data integrity

我在一个相当复杂的Web应用程序中使用事务管理跨多个MySQLInnoDB表的数据。简而言之,给定交易的工作方式如下:从“user_point_totals”表中的一行读取数据各种阴谋计算用户的新总分应该是多少在“user_point_totals”表中创建一个新条目以反射(reflect)更新后的总数假设用户A执行了一些与点数相关的操作,第1步被执行,执行线程将用户的点数总计读入内存,然后应用程序开始计算新的总计点数。同时,用户B执行了一个对用户A的总积分有影响的Action,另一笔交易开始了;但是,第一个事务尚未完成,因此第二个线程获得与第一个事务相同的点总值作为起点(来自同一表行

java - java.util.concurrent.LinkedBlockingQueue 中的奇怪代码

全部!我在LinkedBlockingQueue中发现了奇怪的代码:privateEdequeue(){//asserttakeLock.isHeldByCurrentThread();Nodeh=head;Nodefirst=h.next;h.next=h;//helpGChead=first;Ex=first.item;first.item=null;returnx;}谁能解释为什么我们需要局部变量h?它对GC有何帮助? 最佳答案 如果您查看jsr166src然后你会找到有问题的提交,向下滚动到v1.51这表明答案在这个bugr

java - Java 中的工作线程

我需要通过线程每分钟从表中读取数据,然后执行某些操作。任务完成后,我是否应该启动一个线程并将其置于sleep模式1分钟?然后再次检查表是否有数据,再次执行任务并hibernate1分钟...这是正确的方法吗?任何人都可以为我提供一些Java示例代码来执行相同的操作吗?谢谢! 最佳答案 通常,来自java.util.concurrent的Java5扩展包在这里提供了巨大的帮助。你应该使用ScheduledThreadPoolExecutor.这是一个小的(未测试的)示例:classToSomethingRunnableimplemen

java.util.concurrent 与 Boost Threads 库

BoostThread库与java.util.concurrent库相比如何?性能至关重要,因此我更愿意继续使用C++(尽管现在Java快多了)。鉴于我必须用C++编写代码,存在哪些库可以使线程处理变得简单且不易出错。我最近听说,从JDK1.5开始,Java内存模型已更改以解决一些并发问题。C++怎么样?上一次用C++进行多线程编程是在3-4年前,当时我使用的是pthreads。虽然,我不想再将它用于大型项目。我所知道的唯一其他选择是BoostThreads。但是,我不确定它是否好。我听说过有关java.util.concurrent的好消息,但对Boost线程还一无所知。

java - 为什么 java.util.concurrent.ArrayBlockingQueue 在调用 await() 时使用 'while' 循环而不是 'if'?

我一直在玩我自己的版本,使用“if”,一切似乎都运行良好。当然,如果使用signalAll()而不是signal(),这会严重崩溃,但是如果一次只通知一个线程,这怎么会出错呢?他们的代码here-查看put()和take()方法;在JavaDocforCondition的顶部可以看到一个更简单、更切题的实现。.下面是我实现的相关部分。publicObjectget(){lock.lock();try{if(items.size()=capacity)hasSpace.await();items.addFirst(item);hasItems.signal();return;}catch

java - 如何检测死锁?同步块(synchronized block)超时?

我正在调试一个运行多个线程的Java应用程序。查看日志一段时间后,似乎其中一个线程不再运行。我的猜测是线程正在等待一个永远不会释放的锁(最后的输出是在调用同步方法之前)。我可以为线程配置超时吗?一种“等待这个锁,但如果10秒后它不可用,就不要再等了!” 最佳答案 您可以使用java.util.concurrent.Lock而不是固有的Object锁。RentrantLock没有公平排序具有与内在锁相同的基本行为和语义。有一种方法tryLock需要一个超时参数:Locklock=...;if(lock.tryLock(10L,Time

java - 为什么并发标记和清除 (CMS) 没有清理与 Full GC 相同数量的内存?

我的一台生产机器出现了一个奇怪的问题。它承载了一个执行CMS(并发标记和清除)的Java应用程序,但它只清除了老年代的一小部分。我怀疑内存泄漏并尝试堆转储。但是堆转储之前的FullGC几乎清理了所有的老年代。发生了什么?我从未见过Java垃圾回收的这种行为。通常CMS和FullGC应该收集大约相同数量的垃圾,现在CMS多保留了大约10GB。Java1.7.0_75LinuxCentOS7GC日志:**2016-01-04T07:37:40.196+0000:431200.698:[GC[1CMS-initial-mark:21633423K(27336704K)]22826703K(3

java - java.lang.Thread.State : WAITING (parking) 90%线程解析

我的tomcat应用程序服务器中的线程数每天都在增长。当我对线程转储进行分析时。我发现在430个线程中,有307个线程处于这种状态。示例堆栈跟踪"pool-283-thread-1"#2308674prio=5os_prio=0tid=0x000000000a916800nid=0x1101waitingoncondition[0x00002aec87f17000]java.lang.Thread.State:WAITING(parking)atsun.misc.Unsafe.park(NativeMethod)-parkingtowaitfor(ajava.util.concurre

java - 任务 com.google.firebase.a.v 被 java.util.concurrent.ThreadPoolExecutor 拒绝

friend,我想知道这个错误。我在Android中使用Firebase。完整的错误是:FatalException:java.util.concurrent.RejectedExecutionExceptionTaskcom.google.firebase.a.v@61b9a00rejectedfromjava.util.concurrent.ThreadPoolExecutor@eacc239[Running,poolsize=2,activethreads=2,queuedtasks=128,completedtasks=0]错误发生在Fragment内的DataChange上,

java - tomcat 中有 100 个线程 TIMED_WAITING,导致它在线程总数超过 200 时停止

最近我们的一个生产tomcat服务器变得没有响应,因为tomcat的繁忙线程激增到200。当我们在重新启动之前进行线程转储时,我们有100个线程处于TIMED_WAITING状态,就像这3个线程:""http-bio-7007"-exec-241"daemonprio=10tid=0x00002aaab107b000nid=0x59dfwaitingoncondition[0x0000000051239000]java.lang.Thread.State:TIMED_WAITING(parking)atsun.misc.Unsafe.park(NativeMethod)-parking