我是多线程概念的新手,我正在创建一个简单的 Java 程序来体验多线程和其他内容。
在我的程序中,我只有一个链接列表,然后创建一个线程来从头开始删除列表项。我实现了 Runnable 接口(interface),这就是我的线程的 run 方法的样子:(我在构造函数中设置了 list)
public void run() {
System.out.println("Starting...");
while (!list.isEmpty()) {
synchronized (list) {
list.removeFirst();
}
}
System.out.println("Finished!");
}
在 main 方法中,我向链接列表添加了大量项目(10,000,000),并简单地创建此类的实例以并发运行,并测量时间:
Thread my1 = new Thread(new MyThread("my1", list));
Thread my2 = new Thread(new MyThread("my2", list));
Thread my3 = new Thread(new MyThread("my3", list));
startTime = System.currentTimeMillis();
my1.start();
my2.start();
my3.start();
my1.join();
my2.join();
my3.join();
endTime = System.currentTimeMillis();
elapsedTime = endTime - startTime;
System.out.println("Main finished in " + elapsedTime + " milliseconds.");
有趣的是,当我使用这 3 个线程运行程序时,我收到消息:
Main finished in 444 milliseconds
但是,当我仅使用单个线程时,我收到消息:
Main finished in 223 milliseconds
无论如何,我可以调整代码,使其在使用多线程时运行得更快吗???
提前谢谢
最佳答案
该示例无法从多个线程中受益,相反:您通过同步对列表的访问来增加开销,以便一次只有一个线程可以访问它。虽然这对于正确性来说是必要的,但实际操作的开销非常低,以至于同步占主导地位。
如果您的工作线程对列表中的数据进行了一些昂贵的计算或 I/O,则这种情况可能有意义。如果这是实际目标,您应该将其包含在基准中。
关于java - Java 中处理列表时的多线程性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707848/