TL:ExecutorService executorService = Executors.newFixedThreadPool(8);
调试中的DR 运行并发,但在正常运行时它启动并发,但后来在单线程中运行.
我有一些代码,我开始4个不同的任务ExecutorService.其中两个任务应该几乎立即完成,另外两个应该运行一段时间.
这些任务以秒为单位返回执行时间Future<Double>.
此代码负责任务执行和测量:
public Future<Double> measure(int[] arr, ProcessIntArray processIntArray, ExecutorService es) {
Callable<Double> task = () -> {
long start = System.nanoTime();
processIntArray.process(arr);
long end = System.nanoTime();
return (end - start) / 1000000000.0;
};
return es.submit(task);
}
Run Code Online (Sandbox Code Playgroud)
稍后,在启动这些任务后,我将按照先前运行的相同输入大小的执行时间顺序打印它们.
Future<Double> bubbleSortTime = measure(bubbleSortArray, Solution::bubbleSort, executorService);
Future<Double> insertionSortTime = measure(insertionSortArray, Solution::insertionSort, executorService);
Future<Double> quickSortTime = measure(quickSortArray, Solution::quickSort, executorService);
Future<Double> mergeSortTime = measure(mergeSortArray, Solution::mergeSort, executorService);
System.out.println();
System.out.println("array size: " + size);
System.out.println("quick …Run Code Online (Sandbox Code Playgroud) 我知道这 implements Runnable比extends Thread Java线程更受欢迎,因为它允许我们在需要时扩展其他类.但如果是这样的话,它extends Thread也有自己的优势implements Runnable,如果是的话,这些优势是什么?
我正在用java创建一个桌面应用程序,并且正在做一些内存优化.这让我遇到了在JVM中运行的两个线程,两个线程都命名为:
RMI TCP连接
他们都非常有助于堆增长(从我的角度来看)
现在我不太了解,但TCP听起来像是一些互联网的东西.从我在谷歌上找到的,它与互联网上的序列化/反序列化有关.
但我的应用程序不需要互联网,所以我想知道两件事:
我的工具是"Java visualVM".虽然我已经想到这两个线程是由于使用这个工具而产生的,在这种情况下我会觉得有点愚蠢.
在分析我的应用程序时,我遇到了一个奇怪的行为 - DestroyJavaVM线程始终在运行 - 100%的时间.
在对该主题进行了一些研究之后,在网上几乎没有任何有价值的信息,我所理解的是该线程应该在退出时卸载JVM.
如果是这种情况,为什么这个线程从我开始申请的第一个时刻起100%的时间处于RUNNING状态?它是否消耗了宝贵的资源,因此可能导致OutOfMemoryError(像我有时得到的)?
是否有任何关于此线程实际执行的内容以及触发其初始化的内容的官方参考?
谢谢
如果我想在后台任务中并行运行Stream,是否可以以较低优先级运行它?如果是这样怎么样?
如果我理解正确,堆栈是为了本地原始和对堆中对象的引用.那么如果你有多个线程会发生什么?
它们是否同时共享相同的堆栈空间(但不同的区域),或者JRE切换上下文并在线程之间切换时加载 - 卸载堆栈内容?
或者JRE是否为每个线程分配单独的堆栈?
Java中的多个线程如何处理传递给它们的单个对象引用?
他们是复制该对象然后使用它,还是使用同一个对象?
欢迎任何技术解释。
我无法在上下文中理解这一点:如果线程将一些数据传递给对象并进入睡眠状态,而一个线程正在睡眠时,另一个线程使用同一对象将数据传递给它并进入睡眠状态。
最后一个数据会覆盖对象中的前一个数据吗?
java multithreading thread-safety thread-synchronization java-threads
有以下暂存代码:
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Void> process1 = CompletableFuture.runAsync(() -> {
System.out.println("Process 1 with exception");
throw new RuntimeException("Exception 1");
});
CompletableFuture<Void> process2 = CompletableFuture.runAsync(() -> {
System.out.println("Process 2 without exception");
});
CompletableFuture<Void> process3 = CompletableFuture.runAsync(() -> {
System.out.println("Process 3 with exception");
throw new RuntimeException("Exception 3");
});
CompletableFuture<Void> allOfProcesses = CompletableFuture.allOf(process1, process2, process3);
allOfProcesses.get();
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找如何收集并行执行期间引发的所有异常CompletableFuture.allOf()并将其映射到列表的方法。
我知道我可以通过返回异常(CompletableFuture<Exception>)而不是通过使用抛出并收集它来做到这一点CompletableFuture::join,但我认为抛出异常方法比稍后返回并抛出它更好
这是查找 LCM 和 HCF 之和等于该数字的第一对数字(1 除外)的代码。
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
class PerfectPartition {
static long gcd(long a, long b) {
if (a == 0)
return b;
return gcd(b % a, a);
}
// method to return LCM of two numbers
static long lcm(long a, long b) {
return (a / gcd(a, b)) * b;
}
long[] getPartition(long n) {
var ref = new Object() {
long x;
long y;
long[] ret = null;
};
Thread mainThread = Thread.currentThread();
ThreadGroup t …Run Code Online (Sandbox Code Playgroud) java parallel-processing performance multithreading java-threads
java ×10
java-threads ×10
jvm ×2
asynchronous ×1
heap ×1
java-8 ×1
java-stream ×1
memory ×1
optimization ×1
performance ×1
runnable ×1
stack ×1
thread-state ×1