Questions tagged «multithreading»

多线程是计算机或程序通过利用多个并发的执行流(通常称为线程)来并发或异步执行工作的能力。

7
在ExecutorService的提交和ExecutorService的执行之间选择
如果返回值与我无关,我应该如何在ExecutorService的 Submit或execute之间进行选择? 如果同时测试两者,则除了返回的值外,我看不到其他任何差异。 ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.execute(new Task()); ExecutorService threadExecutor = Executors.newSingleThreadExecutor(); threadExecutor.submit(new Task());

2
CompletableFuture,Future和RxJava的Observable之间的区别
我想知道的区别 CompletableFuture,Future和Observable RxJava。 我所知道的都是异步的,但是 Future.get() 阻塞线程 CompletableFuture 提供回调方法 RxJava Observable--- CompletableFuture与其他好处相似(不确定) 例如:如果客户端需要进行多个服务调用,并且当我们使用Futures(Java)时Future.get()将依次执行...希望了解它在RxJava中的效果如何。 并且文档http://reactivex.io/intro.html说 使用Future来最佳地组合条件异步执行流是困难的(或者是不可能的,因为每个请求的延迟在运行时会有所不同)。当然可以这样做,但是很快就会变得复杂(因此容易出错),或者过早地在Future.get()上阻塞,这消除了异步执行的好处。 真的很想知道如何RxJava解决这个问题。我发现很难从文档中了解。

30
您在Java中遇到的最常见的并发问题是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 这是有关Java常见并发问题的各种民意测验。一个例子可能是经典的死锁或竞争条件,或者是Swing中的EDT线程错误。我不仅对可能出现的问题的范围感兴趣,而且对最常见的问题感兴趣。因此,请在每个评论中留下一个Java并发错误的特定答案,如果看到遇到的评论,请投票。

11
Java同步方法锁定对象还是方法?
如果我在同一个类中有2个同步方法,但是每个方法都访问不同的变量,那么2个线程可以同时访问这2个方法吗?锁是否发生在对象上,或者是否与同步方法中的变量一样具体? 例: class X { private int a; private int b; public synchronized void addA(){ a++; } public synchronized void addB(){ b++; } } 2个线程可以访问类X执行相同的实例x.addA(),并x.addB()在同一时间?

7
Task.Run()和Task.Factory.StartNew()有什么区别
我有方法: private static void Method() { Console.WriteLine("Method() started"); for (var i = 0; i < 20; i++) { Console.WriteLine("Method() Counter = " + i); Thread.Sleep(500); } Console.WriteLine("Method() finished"); } 我想在新任务中启动此方法。我可以像这样开始新任务 var task = Task.Factory.StartNew(new Action(Method)); 或这个 var task = Task.Run(new Action(Method)); 但是Task.Run()和之间有什么区别Task.Factory.StartNew()。创建Task实例后,他们两个都立即使用ThreadPool并启动Method()。什么时候应该使用第一个变量,什么时候应该使用第二个变量?


6
在python中创建线程
我有一个脚本,我希望一个函数与另一个函数同时运行。 我看过的示例代码: import threading def MyThread (threading.thread): # doing something........ def MyThread2 (threading.thread): # doing something........ MyThread().start() MyThread2().start() 我在进行这项工作时遇到了麻烦。我更愿意使用线程函数而不是类来实现这一点。 这是工作脚本: from threading import Thread class myClass(): def help(self): os.system('./ssh.py') def nope(self): a = [1,2,3,4,5,6,67,78] for i in a: print i sleep(1) if __name__ == "__main__": Yep = myClass() thread = …

12
Java多线程中如何使用CountDownLatch?
有人可以帮助我了解什么是Java CountDownLatch以及何时使用它吗? 对于这个程序的工作方式,我没有一个很清楚的想法。据我了解,所有三个线程同时启动,每个线程将在3000ms之后调用CountDownLatch。因此,倒数将逐一递减。锁存器变为零后,程序将打印“ Completed”。也许我理解的方式不正确。 import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class Processor implements Runnable { private CountDownLatch latch; public Processor(CountDownLatch latch) { this.latch = latch; } public void run() { System.out.println("Started."); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } latch.countDown(); } } // ------------------------------------------------ ----- public class App …

7
递归锁(Mutex)与非递归锁(Mutex)
POSIX允许互斥量是递归的。这意味着同一线程可以锁定同一互斥锁两次,并且不会死锁。当然,它还需要将其解锁两次,否则其他线程将无法获得该互斥锁。并非所有支持pthread的系统都支持递归互斥锁,但是如果要符合POSIX,则必须这样做。 其他API(更高级的API)通常也提供互斥体,通常称为“锁定”。某些系统/语言(例如Cocoa Objective-C)提供递归和非递归互斥体。有些语言也只提供其中一种。例如,Java互斥锁始终是递归的(同一线程可能在同一对象上两次“同步”两次)。根据它们提供的其他线程功能的不同,不使用递归互斥可能没有问题,因为可以很容易地自己编写(我已经在更简单的互斥/条件操作的基础上实现了递归互斥)。 我不太了解的是:非递归互斥锁有什么用处?如果两次锁定同一个互斥锁,为什么还要线程死锁?即使是可以避免这种情况的高级语言(例如,测试是否会死锁并在发生异常时抛出异常)通常也不会这样做。他们会让线程死锁。 这是否仅适用于以下情况:我不小心将其锁定两次,而仅将其解锁一次,并且在递归互斥的情况下,将很难发现问题,因此我立即使其死锁,以查看错误的锁定出现在何处?但是在解锁时返回锁计数器是否可以做同样的事情,在这种情况下,我确定我释放了最后一个锁并且计数器不为零,我可以抛出异常或记录问题吗?还是我没有看到其他任何更有用的非递归互斥用例?还是仅仅是性能,因为非递归互斥锁可能比递归互斥锁快一点?但是,我对此进行了测试,但差异实际上并没有那么大。

10
同步与锁定
java.util.concurrentAPI提供了一个名为的类Lock,该类将基本上对控件进行序列化以访问关键资源。它给出了诸如park()和的方法unpark()。 如果我们可以使用synchronized关键字以及using wait()和notify() notifyAll()方法,我们可以做类似的事情。 我想知道其中哪一个在实践中更好,为什么?

8
同步静态方法如何在Java中工作,我可以使用它来加载Hibernate实体吗?
如果我有一个带有静态方法的util类,它将调用Hibernate函数来完成基本数据访问。我想知道是否使该方法synchronized是确保线程安全的正确方法。 我希望这可以防止对同一数据库实例的信息访问。但是,我现在确定当getObjectById特定类调用以下代码时,是否阻止所有类调用以下代码。 public class Utils { public static synchronized Object getObjectById (Class objclass, Long id) { // call hibernate class Session session = new Configuration().configure().buildSessionFactory().openSession(); Object obj = session.load(objclass, id); session.close(); return obj; } // other static methods }

5
如何将此foreach代码转换为Parallel.ForEach?
我有些困惑Parallel.ForEach。 是Parallel.ForEach什么,它的作用是什么? 请不要引用任何MSDN链接。 这是一个简单的例子: string[] lines = File.ReadAllLines(txtProxyListPath.Text); List<string> list_lines = new List<string>(lines); foreach (string line in list_lines) { //My Stuff } 如何用重写这个示例Parallel.ForEach?

6
为什么创建线程据说很昂贵?
Java教程说创建线程很昂贵。但是为什么价格昂贵呢?当创建Java线程使创建过程变得昂贵时,究竟发生了什么?我认为该说法是正确的,但是我只是对JVM中的线程创建机制感兴趣。 线程生命周期开销。线程创建和拆除不是免费的。实际开销因平台而异,但是线程创建会花费时间,从而在请求处理中引入延迟,并且需要JVM和OS进行某些处理活动。如果请求频繁且轻量(如大多数服务器应用程序中一样),则为每个请求创建一个新线程可能会消耗大量计算资源。 来自Java并发实践 作者:Brian Goetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes,Doug Lea 打印ISBN-10:0-321-34960-1

9
自动执行InvokeRequired代码模式
我已经痛苦地意识到,需要多长时间在事件驱动的GUI代码中编写以下代码模式,其中 private void DoGUISwitch() { // cruisin for a bruisin' through exception city object1.Visible = true; object2.Visible = false; } 变成: private void DoGUISwitch() { if (object1.InvokeRequired) { object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); })); } else { object1.Visible = true; object2.Visible = false; } } 这在C#中是一个尴尬的模式,既要记住也要键入。有没有人想出某种捷径或构造可以在某种程度上实现自动化?如果有一种方法可以将函数附加到执行此检查的对象而不必完成所有额外工作(如object1.InvokeIfNecessary.visible = true类型快捷方式)的方法,那将很酷。 先前的答案已经讨论了每次调用Invoke()都是不切实际的,即使这样,Invoke()语法效率低下,仍然难以处理。 那么,有人知道快捷方式吗?

10
NET中如何等待线程完成?
我以前从未真正在C#中使用过线程,在C#中,我需要有两个线程以及主UI线程。基本上,我有以下几点。 public void StartTheActions() { //Starting thread 1.... Thread t1 = new Thread(new ThreadStart(action1)); t1.Start(); // Now, I want for the main thread (which is calling `StartTheActions` method) // to wait for `t1` to finish. I've created an event in `action1` for this. // The I wish `t2` to start... …
178 c#  multithreading 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.