草庐IT

多线段

全部标签

java - 如何在多线程代码中避免ConcurrentModificationException

每当我们使用java.utilCollection类时,如果一个线程更改集合而另一个线程正在使用迭代器遍历它,那么任何对iterator.hasNext()或iterator.next()将抛出ConcurrentModificationException。即使是synchronized集合包装器类SynchronizedMap和SynchronizedList也只是有条件的线程安全的,这意味着所有单独的操作都是线程安全的,但复合操作是控制流取决于先前操作的结果,可能会受到线程问题的影响。问题是:如何在不影响性能的情况下避免这个问题。注意:我知道CopyOnWriteArrayList

java - 使用可运行的 jar 文件执行时如何解决多线程的 Java 问题?

我开发了一个JavaSwing应用程序,它使用SwingWorker类来执行一些长时间运行的任务。当应用程序从IDE(Netbeans)运行时,我可以毫无问题地同时启动多个长时间运行的任务。我为应用程序创建了一个可运行的jar文件,以便能够从IDE外部运行它。从这个jar文件运行的应用程序运行良好,唯一的异常(exception)是它不允许我同时启动2个长时间运行的任务。任务只是一个接一个地运行。我设法创建了一个非常简单的程序来演示这个问题。link该程序使用一个swingworker,它只是从1循环到100,并将数字写入控制台。这两个按钮启动两个执行相同操作的线程。如果我在netbe

java - 哪个 xml validator 将完美地用于多线程项目

我已经使用jdom对模式进行xml验证。那里的主要问题是它给出了一个错误FWK005解析时可能不会调用解析主要原因是多个线程同时进行xerces验证。所以我得到了我必须锁定该验证的解决方案。这不好所以我想知道哪个xmlvalidator最适合多线程项目publicstaticHashMapvalidate(StringxmlString,Validatorvalidator){HashMapmap=newHashMap();longt1=System.currentTimeMillis();DocumentBuilderbuilder=null;try{//obtainlocktopr

Java Swingworker 和多线程

我正在设计一个JavaGUI驱动的应用程序,该应用程序运行许多单独的任务,每个任务都在其自己的SwingWorker扩展类中。这是我使用的正常设计,目的是在它们自己的线程上运行任务,并仍然保持EDT自由更新GUI。每个SwingWorker都使用Executors.newCachedThreadPool在其自己的线程上启动。但是,在一个特定的类中,有一个任务需要相当长的时间来处理。该任务包含一个for循环,最多可执行六次计算。我曾想过在各自的线程中实现六个计算中的每一个以加快处理时间,但我不确定实现这个的最佳方法。是否可以同时扩展SwingWorker和实现Runnable,然后在fo

java - Java中的多线程解压

因此,我尝试在Java中对zip文件进行只读访问,以多线程方式解压缩,因为我的ZipFile/ZipEntry标准简单单线程解决方案使用枚举和输入流以及其他结果将一个50兆的zip文件解压到内存中大约需要整整五秒钟,这最多需要一秒钟才能让我的磁盘在不解压的情况下读取。但是,整个Javazip库的同步化程度令人难以置信,这无疑是因为它都是为读/写等而抽象的。在相同的代码中,而不是使用高效的非同步只读代码。我查看了第三方Java库,它们要么是庞大的VFS库,比用大象枪打苍蝇还糟糕,要么它们具有性能优势的唯一原因是它们是多线程的大多数线程在磁盘IO上阻塞的程度。我想要做的就是将一个zip文件

开源C语言库Melon:多线程治理

问题描述不知你是否有过类似如下的需求:有一些功能,它们足够单一,但又需要后台持续运行,以容器实现感觉太重了,以进程实现又太琐碎了,以线程实现可以接受但是又不好管理。这类程序诸如:数据采集程序、可观测性程序、中间件、代理等等。这一需求乍看之下倒是有点类似supervisor在做的事情,每个功能一个单一后台进程。诚然进程是一个选择,但是实际使用中则会面临是大量的可执行程序和因人而异的开发风格。当然,选择多线程还有另一个重要原因,这里先卖个关子,我们往下看。解决方案因此,笔者将介绍一个开源C语言库——Melon。它实现了一套多线程框架。在这套框架之下,每一个线程是一个独立的功能模块,并且可以接受来自

java - 多线程循环赛

我正在尝试测试8种不同的游戏算法。这些算法可以相互对抗遵循游戏界面的不同类型的游戏。所以,他们必须对战100场比赛。我已经完成了那部分并且工作正常。现在,我正在尝试使其成为多线程,以利用friend计算机的8核。我使用线程的经验很少。那么,为了使我的代码成为多线程,我必须进行哪些更改?这是我的单线程版本的代码。编辑:我想到的解决方案(根据我的基本知识)是制作一个Match类,它需要两个玩家和他们想玩的游戏。该类将实现Runnable,我可以为每个游戏创建一个线程。我现在的问题是,一旦run()方法完成,我将如何通知结果?谢谢for(intp1=0;p1 最佳

java - 防止在多线程上下文中使用非线程安全方法

当用户试图在多线程上下文中使用类的非线程安全方法时,有没有办法抛出异常?我想这个问题主要是为了检测多个线程正在尝试使用该方法。或者,我可以在函数声明中使用“not_synchronous”关键字/标签吗? 最佳答案 您可以在允许线程运行之前检查该方法是否已在使用-但这与使用锁并没有太大区别(注意:我的示例不是可重入的):privatestaticfinalAtomicBooleanused=newAtomicBoolean();publicstaticvoidunsafe()throwsInterruptedException{if

java - 在 Java 中断言多线程代码的最佳方法是什么

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3个月前。Improvethisquestion作为TDD从业者,我想测试我编写的所有代码。在过去的几年里,我一直在编写许多多线程代码,并且我的一部分测试一直很麻烦。当我不得不对run()循环中可能发生的事情进行断言时,我最终会得到这样的断言:assertEventually(timeout,assertion)我知道Mockito对此有一个解决方案,但仅限于verify调用。我还知道JUnit有一个超时属性,可

java - "private final Object"锁在java多线程中有什么用?

Java多线程中“privatefinalObject”锁定的用途是什么?就我的理解而言,我认为要使一个类成为线程安全的,我们应该在我们将所有方法标记为同步的地方使用内部锁定,然后使用“this”将它们锁定在对象的监视器上?或者我们可以用方法内部的私有(private)最终对象锁替换在类的“this”上标记为同步的方法,以锁定通用对象锁以使其线程安全?例如使用内部锁定的代码:publicclassCounter{//Locksontheobject'smonitorpublicsynchronizedvoidchangeValue(){//...}我们可以用下面的外部锁替换上面的代码: