Tag: 并发

使用JFreeChart更改系列时出现随机错误

我正在做一个显示背景计算结果的GUI。 但在此之前,我想testing更改数据集。 这是我的代码: DefaultXYDataset dataset = new DefaultXYDataset(); @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < periods; i++) { series[0][i] = (double) i; series[1][i] = 0; } dataset.addSeries("Series0", series); for (int it = 0; it < 10; it++) { series[1][random.nextInt(periods)] = random.nextInt(100) / 2; double[][] d […]

只有插入一行,如果它不在那里

我一直使用类似于以下的东西来实现它: INSERT INTO TheTable SELECT @primaryKey, @value1, @value2 WHERE NOT EXISTS (SELECT NULL FROM TheTable WHERE PrimaryKey = @primaryKey) …但是一旦发生负载,就会发生主键违例。 这是根本插入这张桌子的唯一声明。 那么这是否意味着上述说法不是primefaces的? 问题是这几乎不可能随意重新创build。 也许我可以把它改成如下的东西: INSERT INTO TheTable WITH (HOLDLOCK, UPDLOCK, ROWLOCK) SELECT @primaryKey, @value1, @value2 WHERE NOT EXISTS (SELECT NULL FROM TheTable WITH (HOLDLOCK, UPDLOCK, ROWLOCK) WHERE PrimaryKey = @primaryKey) 虽然,也许我正在使用错误的锁或使用太多的锁或什么的。 我已经看到了stackoverflow.com上的其他问题,其中答案是build议“IF(SELECT COUNT(*)… INSERT”等,但我总是在(也许是不正确的)假设一个单一的SQL语句将primefaces。 有没有人有任何想法?

Thread start()和Runnable run()之间有什么区别

假设我们有这两个Runnables: class R1 implements Runnable { public void run() { … } … } class R2 implements Runnable { public void run() { … } … } 那么有什么区别呢: public static void main() { R1 r1 = new R1(); R2 r2 = new R2(); r1.run(); r2.run(); } 和这个: public static void main() { R1 r1 = […]

你有没有在Java中使用volatile关键字?

在今天的工作中,我遇到了Java中的volatile关键字。 不是很熟悉,我find了这个解释: Java理论与实践:pipe理波动性 鉴于该文章解释关键字的详细信息,您是否曾经使用它,或者您是否曾经看到可以正确使用此关键字的情况?

在C#中使用Global Mutex有什么好的模式?

互斥类很容易被误解,而全局互斥更是如此。 创build全局互斥锁时使用什么好的安全模式? 一个会工作的 不pipe我的机器在哪个区域 保证正确释放互斥锁 如果互斥量未被获取,则可选地不永久挂起 处理其他进程放弃互斥体的情况

collections被修改; 枚举操作可能无法执行

我不能深究这个错误,因为当debugging器被连接时,似乎不会发生。 下面是代码。 这是Windows服务中的WCF服务器。 每当有数据事件时,服务就会调用NotifySubscribers方法(以随机间隔,但不常见 – 每天约800次)。 当Windows Forms客户端订阅时,订阅者ID被添加到订阅者字典中,并且当客户端取消订阅时,它从字典中被删除。 错误发生在(或之后)客户端取消订阅。 看起来下一次调用NotifySubscribers()方法时,foreach()循环将失败,并在主题行中发生错误。 该方法将错误写入应用程序日志中,如下面的代码所示。 当一个debugging器被连接并且客户端取消订阅时,代码执行正常。 你看到这个代码有问题吗? 我需要使字典线程安全吗? [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] public class SubscriptionServer : ISubscriptionServer { private static IDictionary<Guid, Subscriber> subscribers; public SubscriptionServer() { subscribers = new Dictionary<Guid, Subscriber>(); } public void NotifySubscribers(DataRecord sr) { foreach(Subscriber s in subscribers.Values) { try { s.Callback.SignalData(sr); } catch (Exception e) { DCS.WriteToApplicationLog(e.Message, System.Diagnostics.EventLogEntryType.Error); […]

什么是比赛条件?

在编写multithreading应用程序时,遇到的最常见的问题之一就是竞争条件。 我对社区的问题是: 什么是比赛条件? 你如何检测他们? 你如何处理它们? 最后,你如何防止它们发生?

JavaScript保证是单线程的?

在所有的现代浏览器实现中,JavaScript都是单线程的,但在任何标准中都是如此,还是仅仅是传统的? 假设JavaScript总是单线程是完全安全的吗?

为什么必须等待()始终处于同步块

我们都知道,为了调用Object.wait() ,这个调用必须放在synchronized块中,否则抛出IllegalMonitorStateException异常。 但是这个限制的理由是什么呢? 我知道wait()释放监视器,但为什么我们需要通过使特定的块同步来显式获取监视器,然后通过调用wait()释放监视器? 如果可以在同步块之外调用wait() ,保留它的语义,挂起调用者线程有什么潜在的危害?

AsyncTask是真的在概念上有缺陷还是我错过了什么?

我已经调查了几个月的这个问题,提出了不同的解决方案,我不满意,因为他们都是大规模的黑客。 我还是不敢相信一个有设计上的缺陷的人把它变成了框架,没有人在谈论这个框架,所以我想我一定是错过了一些东西。 问题是与AsyncTask 。 根据它的文件 “允许执行后台操作并在UI线程上发布结果,而无需操作线程和/或处理程序。 这个例子继续展示了如何在onPostExecute()调用一些示例showDialog()方法。 然而,这似乎完全是我设计的 ,因为显示一个对话框总是需要对一个有效的Context的引用,并且一个AsyncTask 不能持有对上下文对象的强引用 。 原因是显而易见的:如果活动被破坏触发任务呢? 这可能会一直发生,例如因为您翻转了屏幕。 如果这个任务持有对创建它的上下文的引用,那么你不仅要坚持一个无用的上下文对象(这个窗口已经被销毁了, 任何 UI交互都将失败,并且有异常!),你甚至有可能冒险创建一个内存泄漏。 除非我的逻辑在这里是有缺陷的,这意味着: onPostExecute()是完全没有用的,因为如果你不能访问任何上下文,在UI线程上运行这个方法有什么好处呢? 这里你不能做任何有意义的事情。 一种解决方法是不传递上下文实例到AsyncTask,而是一个Handler实例。 这是有效的:由于处理程序松散地绑定上下文和任务,您可以在它们之间交换消息,而不会冒险泄漏(对吧?)。 但是这意味着AsyncTask的前提,即你不需要打扰处理程序,是错误的。 它也似乎滥用处理程序,因为你是发送和接收消息在同一个线程(你创建它的UI线程,并通过它发送onPostExecute()这也是在UI线程上执行)。 为了解决这个问题,即使采用了这种解决方法,仍然存在这样的问题,即当上下文被破坏时,您不会记录它所触发的任务。 这意味着在重新创建上下文时,例如在屏幕方向更改之后,您必须重新启动任何任务。 这是缓慢和浪费。 我的解决方案( 在Droid-Fu库中实现 )是维护WeakReference从组件名称到当前实例在唯一应用程序对象上的映射。 每当一个AsyncTask被启动时,它就会在该映射中记录调用上下文,并且在每个回调函数中,都会从该映射中获取当前上下文实例。 这可以确保您永远不会引用陈旧的上下文实例, 并且您始终可以访问回调中的有效上下文,以便您可以在那里进行有意义的UI工作。 它也不会泄漏,因为引用很弱,并且在给定组件的实例不再存在时被清除。 尽管如此,这是一个复杂的解决方法,并且需要对Droid-Fu库类进行子类化,这使得它成为一种相当干扰的方法。 现在我只想知道:我只是大量地缺少一些东西或是AsyncTask真的完全有缺陷? 你的经验如何与它合作? 你是怎么解决这些问题的? 感谢您的输入。