我的数据量很大,所以我考虑将其分成多个块,并使用线程异步处理它。 为了简单起见,假设我有一个列表,并将每个条目与一个线程相关联,所以线程数等于元素数。由于我是Java线程的新手,因此我不确定线程如何异步运行。这是一个简化的代码,可以使您更好地理解。
class ThreadRunner extends Thread {
String threadName;
String element;
public MyThread (String threadName, String element) {
this.threadName = threadName;
this.element = element;
}
public void run() {
System.out.println("Run: "+ threadName);
// some processing on the item
}
}
class TestThread {
public static void main (String arg[]) {
List<String> mainList = new ArrayList<>();
for (int x=0; x< mainList.size(); x++)
{
MyThread temp= new MyThread("Thread #" + x+1);
temp.start();
System.out.println("Started Thread:" + x+1);
}
}
此代码是否以异步方式执行线程?
答案 0 :(得分:0)
使用ExecutorService
并以Runnable
s的形式向其提交工作,而不是自己生成线程。
每个Runnable
任务应处理足够的工作以证明产生线程的开销是合理的,但工作量不应太多,以致于未充分利用其他内核。换句话说,您想要适当地平衡内核之间的工作。一种方法是在任务之间平均划分元素,以便每个任务大致处理num_threads / mainList.size()
个元素,然后将num_thread
个任务提交到ExecutorService
。