草庐IT

【JavaEE】线程池

全部标签

java - 在多个线程中洗牌数组

我有一个大小为N的数组。我想在2个(或更多)线程中打乱它的元素。每个线程都应该使用它自己的数组部分。比方说,第一个线程将元素从0打乱到K,第二个线程将元素从K打乱到N(其中0//try-catchstuffisommitedstaticvoidshuffle(int[]array){Threadt1=newShufflingThread(array,0,array.length/2);Threadt2=newShufflingThread(array,array.length/2,array.length);t1.start();t2.start();t1.join();t2.join

java - Java 垃圾收集器会停止我从 JNI 调用创建的 POSIX 线程吗?

我有一个时间紧迫的应用程序,需要按设定的时间表发送UDP数据报。接收端对抖动的容忍度非常低。用javaScheduledThreadPoolExecutor实现它是不够的,因为当GC执行“停止世界”收集时,我的线程暂停,而GC执行它的工作。我想在Java中实现业务逻辑,同时在C++中使用POSIX线程实现时间关键部分(顺便说一句,native环境是Linux)。这将使我们能够节省数千行用Java编写的代码,并从native系统调用中获得我们需要的节奏。我的问题是:如果我调用创建单独POSIX线程的JNI函数,当JavaGC执行“停止世界”收集时,该线程是否会“暂停”?经验丰富的JNI大

java - 多线程循环赛

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

java - 即使在 Websphere 中应用程序已停止后,线程仍会继续运行

我有一个长时间运行的线程,它是使用org.springframework.scheduling.commonj.WorkManagerTaskExecutor创建的使用Spring并在WebsphereApplicationServer8中运行。问题是即使应用程序已停止,该线程仍继续运行。该线程也需要停止,但它没有发生。我什至尝试使用Thread.currentThread().isInterrupted()来检查当前线程是否被中断,但它总是返回false。因此无法通过我的代码知道线程应该继续运行还是停止。这是我对WorkManagerTaskExecutor的spring配置:线程是

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

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

java - 有没有办法用任务管理器找到Java中运行的线程数?

在Java中,假设如果我使用如下循环启动1000个线程,有什么方法可以监控实际运行的线程数以及线程使用任务管理器消耗的CPU资源吗?for(intj=0;j 最佳答案 您可以使用VisualVM或JConsole或任何其他监控工具 关于java-有没有办法用任务管理器找到Java中运行的线程数?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12053738/

java - ConcurrentHashMap 的线程安全

我有以下类(class)。我使用ConcurrentHashMap。我有很多线程写入map和一个定时器,每5分钟将数据保存在map中。当我在map中写入条目时,我设法通过使用putIfAbsent()来实现线程安全。但是,当我从中读取然后通过clear()方法删除所有条目时,我不希望在读取映射内容然后删除它们的过程中有其他线程写入映射。显然,即使使用同步(锁){},我的代码也不是线程安全的,b/c在saveEntries()中拥有锁的线程不一定是在log()方法中写入我的映射的线程!除非我用同一个锁对象将整个代码锁定在log()中!我想知道是否有任何其他方法可以实现线程安全而无需通过外

java - 是否保证所有参与线程的 compareAndSwap 都不会失败?

假设一些“N”个线程正在尝试CAS一个AtomicInteger变量,是否保证CAS必须恰好一个线程成功?是否有可能所有“N”个线程都尝试失败? 最佳答案 compareAndSet旨在由硬件实现,因此行为将取决于您运行的特定硬件。来自java.util.concurrent.atomic:Thismethod(whichvariesinargumenttypesacrossdifferentclasses)atomicallysetsavariabletotheupdateValueifitcurrentlyholdstheexp

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

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

java - 同步的、易变的和线程安全的

我最近在看一些关于java并发的书。关于线程安全,如果无法使类不可变,则始终可以通过同步其数据来确保线程安全。下面的类显然不是线程安全的publicclassNotThreadSafe{privateintvalue;publicvoidsetValue(intvalue){this.value=value;}publicintgetValue(){returnthis.value;}}然后我可以同步写入,但它仍然不是线程安全的publicclassStillNotThreadSafe{privateintvalue;publicsynchronizedvoidsetValue(int