如何在完成runnable后停止线程?

我有一个任务列表和有限数量的线程。 目标是计算任务完成使用此线程数所需的时间。

我知道我使用线程和Runnable对象的方式有问题。 我是他们的新手,似乎无法弄清楚如何解决它。

它在java.lang.OutOfMemoryError: Java heap space error出现错误java.lang.OutOfMemoryError: Java heap space error几秒钟后, worker.start()行上的java.lang.OutOfMemoryError: Java heap space error

这是我的代码:

 public class Tasks { static Timer timer; //times how long it takes to complete all tasks public static void main(String[] args) { Job t1 = new Sleep(5); Job t2 = new Sum(1000); Job t3 = new Sleep(3); Job t4 = new Sleep(10); Job t5 = new Sum(10); Graph g = new Graph(5); g.getNumEdges(); g.addEdge(t1, t2); g.addEdge(t2, t3); g.addEdge(t2, t4); g.addEdge(t3, t5); g.addEdge(t4, t5); //System.out.println(t5.getPredecessor()); System.out.println(parseGraph(g, 2)); } public static String parseGraph(Graph graph, int K) { long startTime = System.nanoTime();//start timer int numThreads = K; ArrayList x = graph.getNodes(); //check for cycles CycleFinder dc = new CycleFinder(graph); if(dc.hasCycle()==true) { System.out.println(dc.cycle()); return ("The graph has cycles and could not be parsed through."); } List threads = new ArrayList(); ArrayList ready = new ArrayList(); while (x.isEmpty()!= true) { for(int i=0; i<x.size(); i++) { Job y= x.get(i); System.out.println(y); if(y.getComplete()== true) { ready.remove(y); graph.removeNode(y); x.remove(y); } if(y.getPredecessor().isEmpty() || y.getPredecessor() ==null) ready.add(y); } for (int i = 0; i < numThreads && i  0); } long endTime = System.nanoTime(); long duration = endTime - startTime; return ("The Tasks took " + (duration/1000) + " seconds"); } } 

你不需要..在线程完成Runnablerun()方法之后,应该完成它。 您面临的OOM错误与Runnablerun()方法中的逻辑有关。