当前位置: 首页 > 面试题库 >

Java多线程-将数据结构传递给线程

周枫涟
2023-03-14
问题内容

我正在编写的应用程序在某个阶段会生成一个ArrayList of
Characters。在此阶段,我正在尝试创建一个线程来处理此ArrayList。问题是如何将这个ArrayList传递给线程

描述代码:

class thisApp {
    /* Some initial processing creates an ArrayList - aList */

    Runnable proExec = new ProcessList (); //ProcessList implements Runnable
    Thread th = new Thread(proExec);
}

ProcessList的描述性代码:

public class ProcessList implements Runnable {
    public void run() {
      /* Access the ArrayList - aList - and do something upon */
    }
}

我的问题是:如何在run()中传递和访问aList?


问题答案:

您可以简单地传递aListProcessList的构造函数,该构造函数可以保留引用,直到需要它为止:

class thisApp {
    /* Some initial processing creates an ArrayList - aList */

    Runnable proExec = new ProcessList (aList);
    Thread th = new Thread(proExec);
}

public class ProcessList implements Runnable {
    private final ArrayList<Character> aList;
    public ProcessList(ArrayList<Character> aList) {
      this.aList = aList;
    }
    public void run() {
      /* use this.aList */
    }
}

注意: 如果aList将由多个线程同时访问,并用一个或多个线程对其进行修改,则所有相关代码都必须为synchronized



 类似资料:
  • 我在编写一个应用程序时遇到了一些问题。它的工作是用线来解决迷宫。一个线程开始,对于每个分支,它调用另一个类中的静态方法,传递另一个线程需要的参数,然后为每个路径启动线程。我的输出都搞乱了,我不确定这是多线程问题还是引用的问题。下面是一些代码(每个线程都有一个类的新实例): 和返回ValidPaths的方法 CheckEnvirondings使用传递给子级的深度副本(通过构造函数)来验证子级可以采用

  • 问题内容: 谁能建议我如何将参数传递给线程? 另外,它如何用于匿名类? 问题答案: 你需要将构造函数中的参数传递给Runnable对象: 然后调用它:

  • 根据http://wiki.apache.org/jmeter/JMeterFAQ我应该能够在jmeter Gui中指定jmeter测试计划的用户/线程数,如下所示: 其中defaultvalue可以是1,2,3,无论什么。。。 当我尝试这样做时,我的测试甚至没有开始。 有什么提示吗? 谢谢

  • 本文向大家介绍C#程序将参数传递给线程,包括了C#程序将参数传递给线程的使用技巧和注意事项,需要的朋友参考一下 要使用线程,请在代码中添加以下命名空间- 首先,您需要在C#中创建一个新线程- 上面,threadDemo是我们的线程函数。 现在将参数传递给线程- 上面设置的参数是- 示例 让我们看完整的代码,以将参数传递给C#中的线程。 输出结果

  • 问题内容: 如果我创建一个可运行的对象 然后将相同的对象传递给两个线程构造函数并运行它们 有可能吗?这意味着什么? 如果我调用Thread.sleep(0); 在MyRunnable类中,两个线程会因为它们是同一对象而休眠,还是线程实体与该对象完全分开? 是否会有理由这样做,如果不能,请仍然回答上面的两个问题,因为我还不完全了解线程机制? 问题答案: 这绝对是可能和合法的。如果您没有状态(没有字段

  • 我想从可运行线程抛出异常,但不可能从线程抛出它,所以我们可以将chlild线程的状态(任何异常)传递给父线程吗?. 我读到过thread.join(),但在这种情况下,父线程会一直等到子线程完成执行。 在我的例子中,我的父线程在一段时间后逐个启动线程,但当任何线程抛出异常时,它应该将失败通知paent,以便父线程不会启动其他线程。 有什么方法可以实现吗?谁能帮我解决这个问题。