Tag: multithreading

从JavaFX中的不同线程更新UI

我正在开发一个包含多个TextField对象的应用程序,这些对象需要更新以反映关联的后端属性中的更改。 TextField不可编辑,只有后端可能会更改其内容。 据我所知,正确的方法是在一个单独的线程上运行繁重的计算,以免阻塞用户界面。 我使用javafx.concurrent.Task完成了这个javafx.concurrent.Task并使用updateMessage()函数向JavaFX线程传递了一个单值,该工作正常。 但是,我需要更新一个以上的价值,因为后端正在进行更新。 由于后端值是作为JavaFX属性存储的,所以我试着简单地将它们绑定到每个GUI元素的textProperty ,并让绑定完成工作。 然而,这不起作用。 在运行一会儿之后,即使后端任务仍在运行, TextField也会停止更新。 没有例外。 我也尝试使用Platform.runLater()主动更新TextField而不是绑定。 这里的问题在于, runLater()任务的调度速度比平台能够运行得快,所以GUI变得呆滞,即使在后端任务完成之后也需要时间来“赶上”。 我在这里find了几个问题: logging器条目翻译到用户界面停止更新随着时间的推移 JavaFX中的multithreading挂起UI 但我的问题依然存在。 总结:我有一个后端对属性进行更改,我希望这些更改显示在GUI上。 后端是一个遗传algorithm,所以它的操作被分解成几代。 我希望TextField在两代之间至less刷新一次,即使这会延误下一代。 更重要的是GUI比GA运行得更快。 如果我没有清楚问题,我可以发表一些代码示例。 UPDATE 我按照James_D的build议设法做到了。 为了解决后台不得不等待控制台打印的问题,我实现了一个缓冲的控制台。 它存储要在StringBuffer打印的string,并在调用flush()方法时将其附加到TextArea 。 我使用AtomicBoolean来防止下一代发生,直到刷新完成,因为它是由一个Platform.runLater() runnable完成的。 另外请注意,这个解决scheme非常慢。

java中的线程间通信

在Java中如何互相依赖的线程进行通信? 例如,我正在构build一个需要来自其他线程数据的线程的Web爬虫。

Java中的易变variables

所以我正在阅读这本题为“ 实践中的Java并发”的书,我被困在这样一个我不能理解的例子中。 这是引用: 当线程A写入一个易失性variables,然后线程B读取同一个variables时,写入易失性variables之前A对A可见的所有variables的值在读取volatilevariables后对B变得可见。 有人能给我一个反例,说明为什么“在写入易失variables之前A对A可见的所有variables的值在B读完易失variables后变为可见”? 我很困惑,为什么在读取volatilevariables之前,所有其他的非易失性variables都不能被B看到?

在Linux / UNIX上的多处理情况下可以使用互斥体吗?

这是一个面试问题。 在Linux / UNIX的多处理情况下可以使用互斥体吗? 我的想法:不,不同的进程有不同的内存空间。 互斥体仅用于multithreading。 信号量用于多处理进行同步。 对 ? 任何意见,欢迎。 谢谢

TimerTask与Thread.sleep vs Handler postDelayed – 每N毫秒最准确的调用函数?

每N毫秒调用一个函数最准确的方法是什么? 线程与Thread.sleep 的TimerTask 处理器postDelayed 我使用Thread.sleep修改了这个例子 ,它不是很准确。 我正在开发一个音乐应用程序,将在给定的BPM播放声音。 我知道创build一个完全准确的节拍器是不可能的,我不需要 – 只是寻找最好的方法来做到这一点。 谢谢

C#:如果从多个线程调用静态方法会怎么样?

在我的应用程序中我有一个静态方法,从多个线程同时被调用。 我的数据是否有任何混淆的危险? 在我的第一次尝试中,这个方法不是静态的,而是创build了这个类的多个实例。 在那种情况下,我的数据混淆了。 我不知道这是怎么发生的,因为它只是有时候发生。 我仍在debugging。 但是现在这个方法是静态的,到目前为止我没有任何问题。 也许这只是运气。 我不确定。

从线程返回值

我有一个HandlerThread方法。 Thread值被改变了,我想把它返回给test()方法。 有没有办法做到这一点? public void test() { Thread uiThread = new HandlerThread("UIHandler"){ public synchronized void run(){ int value; value = 2; //To be returned to test() } }; uiThread.start(); }

从服务访问UI线程处理程序

我正在尝试一些新的东西,我需要访问UI线程的处理程序。 我知道以下几点: UI线程有自己的处理程序和循环 任何消息将被放入UI线程的消息队列中 循环者拾取事件并将其传递给处理程序 处理程序处理消息并将特定事件发送到UI 我想有我的服务,必须获得UI线程处理程序,并将消息放入此处理程序。 所以这个消息将被处理,并将发布到用户界面。 这里的服务将是一个正常的服务,将由一些应用程序启动。 我想知道这是否可能。 如果是这样,请build议一些代码片段,以便我可以尝试。 问候Girish

如何在multithreading应用程序中使用SQLite?

我正在用SQLite开发一个应用程序作为数据库,并且在理解如何在multithreading中使用它时遇到了一些麻烦(不幸的是,其他堆栈溢出问题都没有帮助我)。 我的用例:数据库有一个表,我们称它为“A”,它具有不同的行组(基于它们的一列)。 我有从表A读取内容的应用程序的“主线程”。此外,我偶尔决定更新某一组行。 要做到这一点,我想产卵一个新的线程,删除组的所有行,并重新插入它们(这是在我的应用程序的上下文中执行它的唯一方法)。 这可能发生在同一时间不同的群体,所以我可能有2+线程试图更新数据库。 我从每个线程使用不同的事务,IE在每个线程的更新周期开始,我有一个开始。 实际上,每个线程实际上所做的就是调用“BEGIN”,从数据库中删除所有需要“更新”的行,并用新值插入它们(这是在我的上下文中必须完成的方式应用)。 现在,我正试图了解如何执行此操作。 我试过阅读(堆栈溢出,SQLite网站上的其他答案),但我还没有find所有的答案。 以下是我想知道的一些事情: 我是否需要调用“open”并从每个线程创build一个新的sqlite结构? 我是否需要为所有这些添加任何特殊的代码,或者它足以产生不同的线程,更新行,这很好(因为我使用不同的交易)? 我看到了一些关于不同锁types的事情,以及我可能会通过调用某些API来获得“SQLite繁忙”的事实,但老实说,当我需要考虑所有这些时,我没有看到任何完整的解释。 我需要吗? 如果有人能够回答问题/指出我的方向是一个好的资源,我会非常感激。 更新1:从目前为止我读过的所有东西,似乎不能有两个线程谁将要写入数据库文件。 请参阅: http : //www.sqlite.org/lockingv3.html 。 在第3.0节中:保留锁意味着进程正在计划在将来的某个时刻写入数据库文件,但是它目前只是从文件中读取数据。 尽pipe多个SHARED锁可以与一个RESERVED锁共存,但一次只能有一个RESERVED锁。 这是否意味着我可能只会产生一个线程来每次更新一组行? 也就是说,有一些轮询线程决定我需要更新一些行,然后创build一个新的线程来做到这一点,但一次只能有一个? 因为它看起来像我创build的任何其他线程将只是得到SQLITE_BUSY,直到第一个线程完成,无论如何。 我的理解是否正确? 顺便说一句,感谢迄今为止的答案,他们已经帮了很多。

如何在不使用<mutex>的情况下在C ++ 11中实现multithreading安全单例

现在,C + + 11有multithreading,我想知道什么是正确的方式来实现惰性初始化单例没有使用互斥(出于原因)。 我想出了这个,但是tbh我不擅长编写无锁的代码,所以我正在寻找一些更好的解决scheme。 // ConsoleApplication1.cpp : Defines the entry point for the console application. // # include <atomic> # include <thread> # include <string> # include <iostream> using namespace std; class Singleton { public: Singleton() { } static bool isInitialized() { return (flag==2); } static bool initizalize(const string& name_) { if (flag==2) return […]