草庐IT

java - 线程数和 Java 应用程序性能

您好:我有一个多线程Java应用程序。当前线程大小已经是100。我们目前使用的是4核CPU。但在不久的将来,CPU核心将增加一倍,甚至达到32核。为了充分利用内核,我们需要增加线程池的大小。但是您可能知道(也许我错了),Java在有10000个线程时很好,但是当线程为200、500、1000个线程时可能会出现性能问题。那么我们是否应该使用其他编程语言,例如scala。我的担心有道理吗? 最佳答案 使用现代JVM,Java进程可以创建操作系统允许的任意数量的线程。您的应用程序能否充分利用这些线程取决于您的应用程序的设计。如果可伸缩性是

java - 使用 System.out.print 与 println 的多线程问题

我有以下线程,它每200毫秒打印一个点:publicclassProgress{privatestaticbooleanthreadCanRun=true;privatestaticThreadprogressThread=newThread(newRunnable(){publicvoidrun(){while(threadCanRun){System.out.print('.');System.out.flush();try{progressThread.sleep(200);}catch(InterruptedExceptionex){}}}});publicstaticvoid

java - 多线程如何破坏Hashmap的内部结构

在Java8fortheReallyImpatient中,Horstmann写道:IfmultiplethreadsmodifyaplainHashMap,theycandestroytheinternalstructure.Someofthelinksmaygomissing,orevengoincircles,renderingthedatastructureunusable.(Section6.2.1)我能理解不同步的并发访问会破坏我的数据。如果两个线程更新相同的值,一个可以覆盖另一个。但是为什么以及如何破坏内部存储器结构? 最佳答案

java - Java 中的多线程 JPEG 图像处理

我在多线程环境中借助图像IO在Java中读取JPEG图像时遇到问题。仅当多个线程尝试读取图像时才会出现问题。症状因不正确的配置文件加载到异常而异:java.awt.color.CMMException:LCMSerror13:Couldn'tlinktheprofiles无论我如何读取图像,通过ImageIO.read或使用ImageReader。源数据(图像)是完全隔离且不可变的。这个问题可能与:https://bugs.openjdk.java.net/browse/JDK-8041429和https://bugs.openjdk.java.net/browse/JDK-80322

java - 使用 JavaFX 任务正确执行多线程和线程池

我有一个选项供用户从FileChooser提交多个文件以供某些代码处理。结果将是读取文件的IO,然后是对存储数据的实际繁重计算。允许用户选择多个文件,并且由于文件处理不依赖于任何其他选择的文件,这让我的生活更容易处理线程。此外,用户需要有一个按钮列表,每个按钮对应一个要取消的任务,以及一个“全部取消”按钮。因此,我必须考虑选择性或集体终止一个或所有任务的能力。最后一个要求是,我不会让用户打开大量文件来阻塞系统。因此,我设计了一个线程数有限的线程池(假设我将任意数量的线程限制在4个)。我不确定如何正确地设置这一切。我有我需要做的事情的逻辑,但使用正确的类是我遇到的问题。我检查过thisr

java - 从屏幕捕获并保存到磁盘多线程

接下来的问题应该是观察屏幕、记录一个事件(测量文本框变为绿色)并记录导致它发生的所有事件,从而制作出导致它发生的事件的“电影”。不幸的是,需要记录整个屏幕。到目前为止,我已经完成了认可的部分。但是我每秒几乎没有两帧。我想要大约25到30fps。我的想法是在两个单独的线程中进行写作和阅读。因为写入事件很少见并且可以在后台运行,所以录制事件可以占用更多时间并运行得更快。不幸的是,整个事情似乎太慢了。我希望能够在事件发生前的10到20秒将屏幕写入磁盘。编辑:如果可能的话,我想尽可能保持平台独立。编辑2:Xuggler似乎有一个独立于平台的jar文件。不幸的是,我真的不知道如何将它用于我的目的

Java:通过多线程并行化快速排序

我正在试验Java中的并行化算法。我从合并排序开始,并在此question中发布了我的尝试.我修改后的尝试是在下面的代码中,我现在尝试在其中并行化快速排序。我的多线程实现或解决此问题的方法是否有新手错误?如果不是,我难道不应该期望双核上的顺序算法和并行算法之间的速度提高超过32%(请参阅底部的计时)?这里是多线程算法:publicclassThreadedQuickextendsThread{finalintMAX_THREADS=Runtime.getRuntime().availableProcessors();CountDownLatchdoneSignal;staticintn

java - 多线程环境下的 HashMap 和哈希表

我真的很困惑这两个集合在多线程环境中的表现。哈希表是同步的,这意味着不会有2个线程同时更新它的值,对吧? 最佳答案 看ConcurrentHashMaps表示线程安全映射。它们提供了HashTable的所有功能,并且性能非常接近HashMap。性能是通过使用map范围锁而不是使用mapwidelock获得的,默认情况下该集合维护一个包含16个锁的列表,每个锁用于锁定map的一个bucket。您甚至可以配置桶的数量:)根据您的数据调整此项可以帮助提高性能。BrianGoetz的《Java并发实践》我怎么推荐都不为过http://jci

java - 编写在多线程 Java 环境中更新两个对象的方法的最佳方法?

假设我们有一个名为AccountService的类来管理帐户的状态。AccountService定义为interfaceAccountService{publicvoiddebit(account);publicvoidcredit(account);publicvoidtransfer(Accountaccount,Accountaccount1);}根据这个定义,实现transfer()的最佳方式是什么,这样您就可以保证transfer是一个原子操作。我对引用Java1.4代码的答案以及可能使用Java5中java.util.concurrent资源的答案感兴趣

java - 一个关于Java多线程的问题

假设下面的类publicclassTestObject{publicvoidsynchronizedmethod1(){//some1000linesofcode}publicvoidmethod2(){//some1000linesofcode}}假设有两个线程访问同一个TestObject类实例,我们称它们为t1和t2。我想知道在以下情况下会发生什么。当t1正在访问method1()的中途时。现在t2正在尝试访问method2()。当t1正在访问method2()的中途时。现在t2正在尝试访问method1()。我的理解是,对于第一个问题,线程t2不会被授予权限,因为object将