goo*_*ain 2 java concurrency multithreading
我是线程概念的新手,我正在努力学习....
我遇到了一种情况,我有一个方法,它返回一个学生列表......以及其他方法,使用此列表来提取学生的其他详细信息,如ParentsName,他们参与的体育等(基于StudentID)..我尝试使用以下代码返回列表,似乎它不起作用:(
import java.util.ArrayList;
public class studentClass implements Runnable
{
private volatile List<Student> studentList;
@Override
public void run()
{
studentList = "Mysql Query which is returning StudentList(StudentID,StudentName etc)";
}
public List<Student> getStudentList()
{
return studentList;
}
}
public class mainClass
{
public static void main(String args[])
{
StudentClass b = new StudentClass();
new Thread(b).start();
// ...
List<Student> list = b.getStudentList();
for(StudentClass sc : b)
{
System.out.println(sc);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用此链接 - 从Thread返回值
列表为NULL.
我哪里错了...... ???
您很可能不等待结果完成.
一个简单的解决方案是使用ExecutorService而不是创建自己的线程池.
ExecutorService es = Executors.newSingleThreadExecutor();
Future<List<Student>> future = es.submit(new Callable<List<Student>>() {
public List<Student> call() throws Exception {
// do some work to get this list
}
};
// do something
// wait for the result.
List<Student> list = future.get();
Run Code Online (Sandbox Code Playgroud)
这给了更多选项,例如
isDone(),看它是否准备好了