【发布时间】:2015-11-26 19:43:34
【问题描述】:
我正在实施一个在线商店,客户可以在其中下订单,我的程序会生成客户是谁以及他们购买了哪些商品的摘要。
public class Summarizer{
private TreeSet<Order> allOrders = new TreeSet<Order>(new OrderComparator());
public void oneThreadProcessing(){
Thread t1;
for(Order order: allOrders){
t1 = new Thread(order);
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void multipleThreadProcessing(){
Thread[] threads = new Thread[allOrders.size()];
int i = 0;
for(Order order: allOrders){
threads[i] = new Thread(order);
threads[i].start();
i++;
}
for(Thread t: threads){
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main (String[] args) {
Summarizer s = new Summarizer();
long startTime = System.currentTimeMillis();
s.oneThreadProcessing();
long endTime = System.currentTimeMillis();
System.out.println("Processing time (msec): " + (endTime - startTime));
System.out.println("-------------Multiple Thread-------------------------------");
long startTime1 = System.currentTimeMillis();
s.multipleThreadProcessing();
long endTime1 = System.currentTimeMillis();
System.out.println("Processing time (msec): " + (endTime1 - startTime1));
这是我的订单类:
public class Order implements Runnable, Comparable<Order> {
private int clientId;
@Override
public void run() {
/*
Print out summary in the form:
Client id: 1001
Item: Shoes, Quantity: 2, Cost per item: $30.00, Total Cost: $60.00
Item: Bag, Quantity: 1, Cost per item: $15.00, Total Cost: $15.00
Total: $75.00
/*
}
}
假设我在这个 TreeSet 中填写了按客户 ID 号排序的特定日期的所有订单,我想只使用一个线程然后使用多个线程生成所有这些订单的摘要并比较性能。要求是让多线程性能更好,我会假设它会是但每次我运行我的主要方法时。多线程实际上几乎总是较慢。难道我做错了什么?我知道人们永远无法确定多线程程序会更快,但由于我还没有处理任何锁定,所以我的程序在 multipleThreadedProcessing() 中不应该更快吗?有什么方法可以确保它更快吗?
【问题讨论】:
标签: java multithreading performance