假定有10000个数据要处理,thread0处理前5000个数据,thread1处理后5000个数据,但我用下面的代码似乎并不能带来性能上的提升,基本上和用1个线程处理10000个数据差不多,这是为什么? Thread thread0 = new Thread(new Runnable()
{
@Override
public void run()
{
long start = System.currentTimeMillis();
// 很多计算0
long end = System.currentTimeMillis();
System.out.println("interval 0 = " + (end - start) + "ms");
}
}); Thread thread1 = new Thread(new Runnable()
{
@Override
public void run()
long start = System.currentTimeMillis();
// 很多计算1
long end = System.currentTimeMillis();
System.out.println("interval 1 = " + (end - start) + "ms");
}
}); thread0.start();
thread1.start();
在上面代码中,如果只执行thread0,而注释掉thread1.start(),时间就几乎少用1半。请高手解惑!
{
@Override
public void run()
{
long start = System.currentTimeMillis();
// 很多计算0
long end = System.currentTimeMillis();
System.out.println("interval 0 = " + (end - start) + "ms");
}
}); Thread thread1 = new Thread(new Runnable()
{
@Override
public void run()
long start = System.currentTimeMillis();
// 很多计算1
long end = System.currentTimeMillis();
System.out.println("interval 1 = " + (end - start) + "ms");
}
}); thread0.start();
thread1.start();
在上面代码中,如果只执行thread0,而注释掉thread1.start(),时间就几乎少用1半。请高手解惑!
(2)两个线程之间有数据共享吗?线程同步也会损耗性能
a执行e 其余的休息
d执行f 其余的休息
只不过他们间隔的时间端
如果是一个cpu
这个线程执行下 那个线程执行下
我这个代码应该不涉及并发安全方面的问题,而且也很容易证明他们是同时执行的:在各自的run方法中增加一个输出语句就可以看到这一点。
不是两个时间加起来的,当两个线程同时运行的时候,interval0 和interval1其中的任何一个和用单个线程运算的时间相当,如果加起来就是单个线程运行时间的两倍了。事实上,我不需要计算两个线程运行的总时间。我只需要max(interval0, interval1)比较小就好了,比如,大致为单个线程运行时间的一半,这就是我期待的结果。