Tag: multithreading

Thread.Sleep()的替代方法

每隔N分钟我们就要运行一个任务列表。 所以我们创build了一个任务执行器 do { DoWork(); }while(!stopRequested) 现在我们想在工作周期之间暂停一下。 每个人似乎都认为Thread.Sleep()是魔鬼。 我已经看到提及使用监视/事件的东西,但我们没有其他人告诉我们去做工作。 我们只是想每隔N分钟就像发条一样做东西。 那么有没有其他的select,或者我find了Thread.Sleep的有效使用? 在另一篇文章中有人提到WaitHandle.WaitOne()作为替代,但你不能从一个非静态方法显然调用? 或者至less我不能,因为我得到一个编译时间错误.. 非静态字段,方法或属性“System.Threading.WaitHandle.WaitOne(System.TimeSpan)”需要对象引用

C ++相当于Java的BlockingQueue

我正在将一些Java代码移植到C ++中,一个特定的部分使用BlockingQueue将来自许多生产者的消息传递给一个消费者。 如果您不熟悉Java BlockingQueue是什么,那么它就是一个具有硬容量的队列,它将公开线程安全的方法,从队列中放()和取()。 如果队列已满,则put()块;如果队列为空,则取()阻塞。 此外,还提供了这些方法的超时敏感版本。 超时与我的使用情况有关,所以提供这些的build议是理想的。 如果没有,我可以自己编码。 我search了很多,并快速浏览了Boost库,我没有发现这样的事情。 也许我在这里是盲目的…但是有谁知道一个好的build议? 谢谢!

Java的叉/join与ExecutorService – 何时使用?

我刚读完这篇文章: Java-5 ThreadPoolExecutor比Java-7 ForkJoinPool有什么优势? 觉得答案不够直白。 你能用简单的语言和例子来解释一下,Java 7的Fork-Join框架和旧的解决scheme之间的权衡是什么? 我还读了关于Java技巧的Java #1的命中:什么时候使用来自javaworld.com的 ForkJoinPool vs ExecutorService ,但文章没有回答标题问题时 ,它主要谈论API差异…

主线程何时停止在Java中?

我读了这个声明: 主线程必须是完成执行的最后一个线程。 当主线程停止时,程序终止。 这是真的吗? 我也来了解“即使主线程序死机程序继续运行”。 据我的理解:当你启动一个程序,JVM创build一个线程来运行你的程序。 JVM创build一个用于运行程序的用户线程。 这个线程被称为主线程。 该类的主要方法是从主线程调用。 如果程序从主线程产生新的线程,它会停止,直到最后一个线程死亡。 哪一个是真的?

unit testingmultithreading应用程序?

有没有人有任何build议一致的方式来unit testingmultithreading应用程序? 我已经做了一个应用程序,我们的模拟“工作线程”有一个thread.sleep与一个公共成员variables指定的时间。 我们会使用这个,所以我们可以设置一个特定的线程将花费多长时间来完成它的工作,然后我们可以做我们的断言。 任何想法的更好的方法来做到这一点? 任何良好的模拟框架.NET可以处理这个?

如何在Java 5中使用ExecutorService实现任务优先级?

我正在实现一个线程池机制,我想执行不同优先级的任务。 我想有一个很好的机制,我可以提交一个高优先级任务的服务,并安排在其他任务之前。 任务的优先级是任务本身的一个固有属性(无论我将这个任务表示为Callable还是可运行对我来说都不重要)。 现在,从表面上看,我可以在我的ThreadPoolExecutor使用PriorityBlockingQueue作为任务队列,但该队列包含Runnable对象,这可能是也可能不是我已经提交给它的Runnable任务。 而且,如果我已经提交了Callable任务,目前还不清楚这将如何映射。 有没有办法做到这一点? 我真的不想为此而推出自己的产品,因为我更有可能错误地这样做。 (撇开,是的,我意识到在这样的事情中可能会出现对于优先级较低的工作的匮乏,对于公平合理保证的解决scheme,加分(?!)

ObservableCollection和线程

我在课堂上有一个ObservableCollection 。 进一步进入我的课,我有一个线程。 从这个线程我想添加到我的ObservableCollection 。 但我不能这样做: 这种types的CollectionView不支持从与分派器线程不同的线程对其SourceCollection的更改。 请注意,这不是从UI线程发生的,所以我没有访问调度程序。

Java如何使用多个内核?

JVM在一个进程中运行,JVM中的线程共享属于该进程的堆。 那么JVM如何利用提供多个操作系统线程的多个内核来提高并发性?

是否使用任务(TPL)库使应用程序multithreading?

最近在接受采访时,我得到了这个问题。 问:你写了multithreading应用程序吗? 答:是的 问:要多解释一下? 答:我使用Tasks (任务并行库)来执行一些任务,如waiting for some info from internet while loading UI 。 这提高了我的应用程序可用性。 问:但是,您刚刚使用过TPL意味着您已经编写了multithreaded应用程序? 我:(不知道该说什么1) 那么,什么是一个multithreading应用程序? 与使用Tasks不同吗?

“HttpContext.Current”属性和相关事物的交叉线程使用

我从<使用C#中的示例的基本ASP.NET>读取以下语句: 另一个有用的属性是HttpContext类的静态Current属性。 此属性始终指向正在服务的请求的HttpContext类的当前实例。 如果您正在编写将从页面或其他pipe道类使用的辅助类,并且可能因任何原因需要访问上下文,这可能会很方便。 通过使用静态Current属性来检索上下文,可以避免将引用传递给helper类。 例如,清单4-1中所示的类使用上下文的Current属性来访问QueryString并将某些内容打印到当前的响应缓冲区中。 请注意,为了正确初始化此静态属性,调用者必须在原始请求线程上执行,因此如果您在请求期间生成了其他线程以执行工作,则必须注意自己提供对上下文类的访问权限。 我想知道大胆的部分的根源,有一件事导致另一件事,这是我的想法: 我们知道一个进程可以有多个线程。 每个线程都有自己的堆栈。 这些线程也可以访问共享内存区域,即堆。 据我所知,堆栈就是存储该线程所有上下文的地方。 对于一个线程来访问堆中的东西,它必须使用一个指针,并将指针存储在堆栈中。 所以当我们进行一些跨线程调用时,我们必须确保所有必要的上下文信息都从调用者线程的堆栈传递到被调用者线程的堆栈。 但是我不太清楚,如果我犯了什么错误。 任何意见将深表赞赏。 谢谢。 加 这里的堆栈被限制在用户堆栈中 。