我想从Java启动一个进程,读取它的输出,并得到它的返回码。 但是,它正在执行,我想能够取消它。 我开始启动这个过程: ProcessBuilder pb = new ProcessBuilder(args); pb.redirectErrorStream(true); Process proc = pb.start(); 如果我打电话proc.waitFor(),我不能做任何事情,直到stream程退出。 所以我假设我需要这样的东西: while (true) { see if process has exited capture some output from the process decide if I want to cancel it, and if so, cancel it sleep for a while } 这是正确的吗? 有人可以给我一个如何在Java中做到这一点的例子吗?
我有这样的东西: if (f = acquire_load() == ) { … use Foo } 和: auto f = new Foo(); release_store(f) 你可以很容易地想象一下,使用带有load(memory_order_acquire)和store(memory_order_release)的primefaces的acquire_load和release_store的实现。 但是现在如果release_store是通过_mm_stream_si64实现的,这是一个非暂时写入,而不是相对于x64上的其他存储进行sorting的呢? 如何获得相同的语义? 我认为以下是最低要求: atomic<Foo*> gFoo; Foo* acquire_load() { return gFoo.load(memory_order_relaxed); } void release_store(Foo* f) { _mm_stream_si64(*(Foo**)&gFoo, f); } 并如此使用它: // thread 1 if (f = acquire_load() == ) { _mm_lfence(); … use Foo } 和: […]
在multithreading的.NET编程中,使用ThreadPool.QueueUserWorkItem与通过新的Thread()和Thread.Start()启动我自己的线程有什么关系? 在一个服务器应用程序(比方说,一个ASP.NET应用程序或WCF服务),我认为ThreadPool总是在那里和可用。 怎么样在客户端应用程序,如WinForms或WPF应用程序? 是否有成本来启动线程池? 如果我只想要3或4个线程在一些计算上短时间工作,对QUWI或Thread.Start()更好。
跳到问题的底部; 这只是一些额外的信息 我正在使用一个组件(GeckoFX)来渲染一些网站,很好,但它只能在Windows窗体中使用; 因为它必须绑定到可以绘制的WinForms对象。 由于所有的WinForms都在同一个线程中运行,我一次只能使用一个GeckoFX实例; 所以我决定创build一个WinFormforms的“工人类”,并在其中添加所有的逻辑。 表单不需要与主表单进行通信。 现在我可以启动10个窗口,最终它们将工作,但是在所有其他窗体处理完所有GeckoFX事件之前,每个新窗体都将等待,因为您不能在一个线程上使用多个实例。 此外,浏览器必须在UIThread上。 所以: 是否有可能创build多个UI线程(每个表单一个)? 我看到有人这样做( http://74.125.77.132/search?q=cache:PrFTaH2nx_YJ:geckofx.org/viewtopic.php%3Fid%3D453+geckofx+service&cd=1&hl=nl&ct=clnk&gl=nl&client=firefox-a ),但从来没有人得到他的代码示例工作。 做这个工作的人最初使用某种forms的定制信息来做这种事情,但我不知道如何做到这一点。
我使用pthread_create(&thread1, &attrs, //… , //…); 如果发生某种情况需要杀死这个线程如何杀死这个?
有人知道吗? 而更大的问题是当你遇到这个最大值时会发生什么? 这与其他Windows操作系统,如Vista,XP等相同的数字?
假设我正在运行一项服务,用户可以提交正则expression式来search大量数据。 如果用户提交一个非常缓慢的正则expression式(即Matcher.find()需要几分钟才能返回),我想要一种方法来取消匹配。 我能想到的唯一方法是让另一个线程监视匹配的时间,如果需要的话使用Thread.stop()来取消它。 成员variables: long REGEX_TIMEOUT = 30000L; Object lock = new Object(); boolean finished = false; Thread matcherThread; 匹配线程: try { matcherThread = Thread.currentThread(); // imagine code to start monitor thread is here try { matched = matcher.find(); } finally { synchronized (lock) { finished = true; lock.notifyAll(); } } } catch (ThreadDeath td) […]
你如何使用CreateThread()来创build类成员函数的线程?
是原始的java原始整数(int)primefaces吗? 对两个共享int的线程的一些实验似乎表明它们是 ,但是当然没有证据表明它们并不意味着它们是。 具体来说,我跑的testing是这样的: public class IntSafeChecker { static int thing; static boolean keepWatching = true; // Watcher just looks for monotonically increasing values static class Watcher extends Thread { public void run() { boolean hasBefore = false; int thingBefore = 0; while( keepWatching ) { // observe the shared int int thingNow = thing; […]
如果Java中的variables是从多个线程访问的,则必须确保它们已被安全地发布。 这通常意味着使用synchronized或volatile 。 我有一个印象,就是有些同事没有认真对待这个问题,因为他们“从来没有听说过volatile ,而且他们的计划已经运作多年了”。 所以我的问题是: 有人可以提供一个示例Java程序/代码片断,可靠地显示数据可见性问题。 我认为运行一个程序,看到意想不到的NPE或陈旧的variables值,将会对帮助更多,而不仅仅是理论上的解释,这是无法certificate的。 非常感谢你的帮助! 更新:只是为了强调这一点。 我已经阅读过Java Concurreny的实践,并且知道理论上存在可见性问题的例子。 我正在寻找的是一种真正展示他们的方法。 我不确定,这实际上是可能的,但也许有一个jvmconfiguration或类似的东西,允许它。