如何在线程完成可运行后停止线程?

2023-12-07

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

我知道我使用线程的方式有问题Runnable目的。我对他们来说是新手,似乎不知道如何解决它。

它的错误是java.lang.OutOfMemoryError: Java heap space error在线上worker.start()几秒钟后。

这是我的代码:

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<Job> 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<Thread> threads = new ArrayList<Thread>();
    ArrayList<Job> ready = new ArrayList<Job>();
    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 < ready.size(); i++) {
            System.out.println("test");
            Runnable task = new MyRunnable(ready.get(i));
            Thread worker = new Thread(task);
            worker.setName(String.valueOf(i));
            worker.start();
            threads.add(worker);
          }
       //int running = 0;
       //do {
       //running = 0;
          //for (Thread thread : threads) {
            //if (thread.isAlive()) {
             // running++;
           // }
         // }System.out.println("We have " + running + " running threads. ");
       // } while (running > 0);
}
    long endTime = System.nanoTime();
    long duration = endTime - startTime;
    return ("The Tasks took " + (duration/1000) + " seconds");
}


}

你不需要..线程完成后run()的方法Runnable,应该完成。 您面临的 OOM 错误与内部逻辑有关run()的方法Runnable.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在线程完成可运行后停止线程? 的相关文章

随机推荐

  • ASP.NET Core API 仅返回列表的第一个结果

    我创建了一个团队 Web api 控制器 并尝试调用 GET 方法来获取数据库中所有团队的 json 结果 但是当我拨打电话时 我只在 json 中返回第一支球队 但是当我在返回语句上设置断点时 它会显示所有 254 支球队以及所有比赛 这
  • 如何在discord.py cogs 中创建别名?

    我已经设置了discord py cog 可以使用了 有一个问题 如何为命令设置别名 我将在下面给您我的代码 看看我还需要做什么 Imports from discord ext import commands import bot My
  • 实体框架 5:使用延迟加载或预加载

    如果我的问题是正常的 我很抱歉 但当我使用 Entity Framework 5 设计 ASP NET MVC 4 0 应用程序时 我遇到了这个问题 如果我选择预加载 我只需简化使用 public Problem getProblemByI
  • 如何在 Django 中的 CharField 上添加占位符?

    以这个非常简单的形式为例 class SearchForm Form q forms CharField label search 这将在模板中呈现
  • 在 Dataflow 运行器上拆分 pcollections 时出错

    我有一个用 python 构建的 Apache Beam 管道 我正在从 csv 文件读取行 然后有适用于所有 pcollection 的通用管道步骤 这很好用 对于来自特定文件名的 pcollections 我想执行几个额外的步骤 因此
  • Knockout JS ObservableArray 具有多对多关系

    我正在使用 Knockout js 创建一个来宾列表应用程序 到目前为止一切进展顺利 但是我有一个最佳实践问题 我的应用程序有几种不同类型的对象 其中包括访客和标签 客人可以有多个标签 标签也可以有多个客人 在应用程序的不同点 我需要单独显
  • python:如何获取有关函数的信息?

    当需要有关类型的信息时 您可以使用 my list dir my list gets add class contains delattr delitem delslice doc eq format ge getattribute get
  • 根据条件重置累计计数

    我有一个与此类似的数据框 df pd DataFrame col1 a a a a a a b b b c c c c col2 1 1 1 1 2 2 1 1 2 1 1 2 2 col3 1 1 0 0 0 0 0 1 0 1 1 1
  • bash 中参数过多错误

    我正在编写一个脚本来删除目录中的所有文件以供练习 我在变量周围使用引号 但仍然收到以下错误 usr local bin deleteall line 6 too many arguments usr local bin deleteall
  • javascript 选择更改字段价格并带有折扣 onchange [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一个带有小计 折扣和总计的 html 表单 折扣的选择下拉菜单有 5 10 和 20 值 小计的选择下拉菜单有 200 100 和 20 值 另一个输入文本字段获取总计表单
  • 如何将焦点集中到消息框?

    Private Sub CommandButton1 Click Dim i As Long Dim xreply As Integer Dim names As Long Dim IE As Object i ActiveSheet Ra
  • 你能写一个无法实现的接口吗?

    这与java中的最终接口 在讨论中 有一个观点认为与接口相关的 Final 概念是不明确的 最终接口是否意味着它不能有子接口 这是否意味着它不能实现 这是第一个问题 你能编写一个最终接口 这样编译器就会阻止你实现它吗 正如我将展示的 可以使
  • 如何添加js条件

    Hi我想在 JS 中编写一个条件 这将导致添加外部 js 例如 如果条件是 x gt 2 并且为 true 那么我希望它加载不同的外部 js 文件 但如果为 false 则加载另一个 js 文件 我该如何写呢 Thanks var file
  • C#中“<<”代表什么? [复制]

    这个问题在这里已经有答案了 Serializable Flags public enum SiteRoles User 1 lt lt 0 Admin 1 lt lt 1 Helpdesk 1 lt lt 2 这意味着向左移位 所以 int
  • Node.js 不支持 ES6 导入和导出

    我正在使用 WebStorm 2016 2 2 构建一个项目 我使用 Node js 6 6 0 版本 我已将 JavaScript 版本设置为 ES6 但两者都出现 意外令牌 错误import and export关键词 顺便说一句 我没
  • 在 Fortran 中显示包含两列的表格以及可用数据

    我有两个变量说x and y两者都有大约 60 分 基本上是x and y绘图的轴 现在 当我尝试以列或表的形式在结果文件中显示它时x值和对应的y我最终得到了所有的值x两列中显示的值 然后是y价值观 我无法正确地将其取出 这是代码的一小部分
  • ES6 类:通过应用于方法的“addEventListener”访问“this”[重复]

    这个问题在这里已经有答案了 在此 es6 脚本中 单击事件不起作用 因为sayHello方法被调用this elm div as this 如何在不失去范围的情况下将事件与方法关联 class player constructor name
  • 在 html 中加载 javascript 的理想位置在哪里? [复制]

    这个问题在这里已经有答案了 我理解分散在 html 代码中的内联 javascript 如下例所示 这很糟糕 p Foo p 然而 经过一段时间的编码后 了解在文档末尾加载 JavaScript 是最好的方法 我确实看到很多网站都符合在文档
  • 在 Python 中获取精确的 Android GPS 位置

    我尝试在 Python 中获取 Android 手机的 GPS 位置 使用 QPython3 应用程序 这种方法可行 但 Android 中似乎有几个 LocationProvider gps 纯gps定位 速度慢 耗能 但非常准确 正是我
  • 如何在线程完成可运行后停止线程?

    我有一个任务列表和有限数量的线程 目标是计算使用此数量的线程完成任务所需的时间 我知道我使用线程的方式有问题Runnable目的 我对他们来说是新手 似乎不知道如何解决它 它的错误是java lang OutOfMemoryError Ja