public class TestThread1 {
public static void main(String args[]) {
Runner1 r = new Runner1();
Thread t =new Thread(r);
t.start();
for(int i=0; i<100; i++) {
System.out.println("Main Thread:------" + i);
}
}
}
class Runner1 implements Runnable {
public void run() {
for(int i=0; i<100; i++){
System.out.println("Runner1:" + i);
}
}
}
去掉主程序输出中的 + i 线程不再交替执行
不知道为什么,求解释
public static void main(String args[]) {
Runner1 r = new Runner1();
Thread t =new Thread(r);
t.start();
for(int i=0; i<100; i++) {
System.out.println("Main Thread:------" + i);
}
}
}
class Runner1 implements Runnable {
public void run() {
for(int i=0; i<100; i++){
System.out.println("Runner1:" + i);
}
}
}
去掉主程序输出中的 + i 线程不再交替执行
不知道为什么,求解释
解决方案 »
- ireport 启动报错 4.7的 有能解决的吗
- AppFuse搭建环境出现的问题,急.....
- 很奇怪的struts2配置问题
- <jsp:include page=""/>问题
- 工厂模式的好处?
- spring中的init-method的不解
- hibernate 中一添加关系如(mone-to-one),在load中就无法load
- 如何从一个zip包中读文件?
- 100分求助!用java生成xml文件时,如何实现对页面,甚至对页面的联接进行授权
- 如何生成一个-0.1~0.1范围内的随机数?
- mabatis多表查询,一个表一条数据带着另一个表好几条数据
- Jquery+JAVA实现开心网上传头像剪裁功能
这两个对比说明这根电脑的运行速度应该没有关系吧。
还有一点要声明:我是在DOS下执行的
10000次真不算啥。有没有 +i,涉及到 String 做连接运算,所以消耗会更明显很多,也就是相当于延长了每次循环的CPU开销;那么对应的JVM执行优化策略也会不一样;基本上就这两点主要区别,你可以用javap来看看字节码就清楚了。所谓DOS,指的是命令行下吧,也就是CMD,这个没有太大差异。
另外呢,其实这种测试方式,瓶颈其实是卡在IO上了,建议修改下:
for(int i=0; i<10000000; i++) {
if (i % 10000 == 0)
System.out.println("Main Thread:------" + i);
}
线程也这么修改下,免得刷屏刷得太快你都看不见东西。
for(int i=0; i<10000000; i++) {
if (i % 10000 == 0)
System.out.println();
}
结果中确实在交替这应该跟判断有关,也证明可能是字符串连接占用的开销比较大,导致的结果我把循环改成100000000次,仔细看结果中间确实有分支线程的输出