Java多线程-将数据结构传递给线程
我正在编写的应用程序在特定阶段生成字符数组列表。在这个阶段,我尝试创建一个线程来处理这个ArrayList。问题是如何将此ArrayList传递给线程 描述代码:Java多线程-将数据结构传递给线程,java,multithreading,Java,Multithreading,我正在编写的应用程序在特定阶段生成字符数组列表。在这个阶段,我尝试创建一个线程来处理这个ArrayList。问题是如何将此ArrayList传递给线程 描述代码: class thisApp { /* Some initial processing creates an ArrayList - aList */ Runnable proExec = new ProcessList (); //ProcessList implements Runnable Thread
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?向
ProcessList
构造函数添加一个参数
public class ProcessList implements Runnable
{
private final List<Foo> aList;
public ProcessList(List<Foo> aList)
{
this.aList = aList;
}
public void run()
{
System.out.println(aList.size());
}
}
公共类ProcessList实现可运行
{
私人最终名单;
公共进程列表(列表列表列表)
{
this.aList=aList;
}
公开募捐
{
System.out.println(aList.size());
}
}
如果有任何其他线程可以访问列表,您必须小心并发访问列表。您只需将
aList
传递给ProcessList
的构造函数,该构造函数可以保留引用,直到需要时为止:
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 */
}
}
class thisApp{
/*一些初始处理会创建一个ArrayList-List*/
Runnable proExec=新进程列表(列表);
Thread th=新线程(proExec);
}
公共类ProcessList实现可运行{
私人终审法官;
公共进程列表(ArrayList){
this.aList=aList;
}
公开募捐{
/*用这个*/
}
}
N.B.如果多个线程同时访问
aList
,并且有一个或多个线程对其进行修改,则所有相关代码都需要同步您可以将列表设置为最终列表,但最好将其传递给您的可运行对象
public class ProcessList implements Runnable {
List<Character> list;
public ProcessList(List<Character> list){
this.list = list;
}
public void run() {
this.list.size();
}
}
公共类ProcessList实现可运行{
名单;
公共进程列表(列表){
this.list=列表;
}
公开募捐{
this.list.size();
}
}
“您可以将列表设置为最终列表”-我不明白您在那里说的话。我的意思是,如果列表在范围内,那么通过将其设置为最终列表,您可以从threads run方法中引用它,而无需将其传入。同时访问列表的可能性很小。无论如何,谢谢!