草庐IT

Multithreading

全部标签

java - JVM退出后守护线程如何存活?

我正在阅读关于Java的setDaemon()方法的文档,当我读到JVM没有等待守护线程完成就退出时感到困惑。但是,由于本质上守护线程是JavaThread,它可能依赖于在JVM上运行来实现其功能,如果JVM在守护线程完成之前退出,守护线程如何生存? 最佳答案 他们无法生存。当所有线程(守护程序线程除外)都已死亡时,JVM将退出。当您启动您的应用程序时,JVM将启动一个单一的非守护线程来运行您的静态main方法。一旦main方法退出,这个主线程就会结束,如果你没有生成其他非守护线程,JVM就会退出。但是,如果您启动了另一个线程,JV

java - 多线程 - 多个用户

当单个用户访问应用程序时,可以使用多个线程,如果存在多个内核,它们可以并行运行。如果只有一个处理器,那么线程将一个接一个地运行。当多个用户访问一个应用程序时,线程是如何处理的? 最佳答案 我可以从Java的角度来谈,所以你的问题是“当多个用户访问一个应用程序时,线程是如何处理的?”。答案是这完全取决于您的编程方式,如果您使用的是某些网络/应用程序容器,它们会提供线程池机制,您可以在其中拥有多个线程来处理服务器用户请求,每个用户发起一个请求,然后依次发起一个请求由一个线程处理,所以如果有10个并发用户,将有10个线程同时处理10个请求

java - 如何在 Java 并行程序中获得理想的线程数?

我需要在批处理程序中获得理想数量的线程,该批处理程序在支持并行模式的批处理框架中运行,例如SpringBatch中的并行步骤。据我所知,执行程序步骤的线程太多并不好,它可能会对程序的性能产生负面影响。一些因素可能会导致性能下降(上下文切换、使用共享资源时的竞争条件(锁定、同步..)......(还有其他因素吗?))。当然,获得理想线程数的最佳方法是对我进行实际程序测试以调整程序的线程数。但在我的情况下,真正的测试并不是那么容易,因为测试需要很多东西(人员、测试安排、测试数据等),这些对我现在来说太难准备了。因此,在进行实际测试之前,我想尽可能地了解如何获得我的程序的可猜测理想线程数。我

java - 如果在同步方法中调用,thread.yield() 是否会失去对对象的锁定?

据我所知,Thread.currentThread().yield()是对线程调度程序的通知,它可以将cpu周期分配给其他具有相同优先级的线程(如果存在)。我的问题是:如果当前线程锁定某个对象并调用yield(),它会立即失去该锁定吗?当线程调度程序发现没有这样的线程分配cpu周期时,调用了yield()的线程将再次争取锁定它之前丢失的对象?我在javadoc和论坛中找不到它[http://www.coderanch.com/t/226223/java-programmer-SCJP/certification/does-sleep-yield-release-lock]有50-50答

java线程和主线程

让主线程等待所有线程完成的最佳方法是什么?for(inti=0;i 最佳答案 创建一个列表并等待所有。Listthreads=newArrayList();for(inti=0;i然而,使用ExecutorService可能是处理线程池的一种更优雅的方式。ExecutorServicees=Executors.newCachedThreadPool();for(inti=0;i 关于java线程和主线程,我们在StackOverflow上找到一个类似的问题:

java - Java 中的并发性 : synchronized static methods

我想了解如何在Java中对静态方法进行锁定。假设我有以下类(class):classFoo{privatestaticintbar=0;publicstaticsynchronizedvoidinc(){bar++;}publicsynchronizedintget(){returnbar;}据我了解,当我调用f.get()时,线程会获取对象f上的锁,而当我调用Foo.inc()线程获取类Foo上的锁。我的问题是这两个调用如何相互同步?调用静态方法是否也会获取所有实例化的锁,或者反过来(这似乎更合理)?编辑:我的问题不完全是staticsynchronized如何工作,而是静态和非静态

java - 使用多核处理器是否需要多线程算法?

我只是想知道如果算法必须使用多核处理器,我们是否真的需要多线程算法,或者即使我们的算法是顺序的,jvm是否会使用多核处理器?更新:相关问题:Muti-Threadedquickormergesortinjava 最佳答案 我不相信任何当前的生产JVM实现都执行自动多线程。它们可能使用其他核心进行垃圾收集和其他一些内务管理,但如果您的代码是按顺序表示的,则很难自动并行化它并仍然保持精确的语义。可能有一些实验性/研究型JVM试图并行化JIT可能发现的并行性令人尴尬的代码区域,但我还没有听说过用于生产系统的类似情况。即使JIT确实发现了这

java - 对于 Java 类,内部锁实际上意味着什么?

为了正确理解Java中并发的问题和解决方案,我正在阅读官方Java教程。在其中一个页面中,他们定义了内部锁和同步link.在这个页面中,他们说:Aslongasathreadownsanintrinsiclock,nootherthreadcanacquirethesamelock.Theotherthreadwillblockwhenitattemptstoacquirethelock.另外,他们在同步方法中的锁部分提到:Whenathreadinvokesasynchronizedmethod,itautomaticallyacquirestheintrinsiclockforth

java - 在 Java 中停止线程?

这个问题在这里已经有了答案:Howtoabortathreadinafastandcleanwayinjava?(15个答案)关闭去年。我正在编写一段连接到服务器的代码,使用该连接生成一堆线程并执行一堆“东西”。在某些情况下连接失败,我需要停止一切并从头开始使用一个新对象。我想在对象之后清理,但在线程上调用thread.stop,但这种方法似乎已被弃用。推荐的替代方法是什么?我应该为每个线程编写自己的清理和退出方法吗?将线程设置为空?或者是其他东西?

java - Java 中用于唯一 ID 的序列生成器

我打算写一个序列生成器,它将被使用在发布期间在我的REST资源实现类中生成唯一身份。由于每个发布请求都由单独的线程处理,我使变量volatile和方法同步。我没有选择使用序列或其他东西传统的RDBMS提供。publicclassSequenceGen{volatilestaticintn=0;publicsynchronizedintnextNum(){returnn++;}}这是我目前所拥有的,并计划创建一个变量我的REST实现中的SequenceGen。我的实际问题是它在什么地方坏了?我测试了两个线程,但我没有看到任何重复的值。 最佳答案