java多线程计算1/1+1/2+...+1/n为何比单线程要慢?!?

java多线程计算1/1+1/2+...+1/n为何比单线程要慢

java多线程学习交流

每个java程序猿都会遇到的多线程学习,总体来说学习起来比稍微吃力,毕竟设计都线程安全问题等等。
今天为了重温一下多线程(为了面试),计算1/1+1/2+…+1/n的值。
思路就是将整个计算段切分为若干个小段(大数据思想),再将小段累加。
上代码

// An highlighted block
package com.zw;

import java.util.concurrent.CountDownLatch;

public class ThreedTest {

	public static void main(String[] args) throws Exception {
		int maxIndex = 1000000000;	
		int iThread = 1000;
		
		long b = System.currentTimeMillis();
		CountDownLatch countDownLatch2 = new CountDownLatch(iThread);
		MyThreed.setCountDownLatch(countDownLatch2);
		int evrNum = maxIndex/iThread;
		for(int i=0;i<iThread;i++) {
			MyThreed my = new MyThreed();
			my.setBegin(i*evrNum+1);
			my.setEnd((i+1)*evrNum);
			Thread thread = new Thread(my);
			thread.start();
		}
		countDownLatch2.await();
		long e = System.currentTimeMillis();
		//多线程用时结果
		System.out.println(e-b);
		System.out.println(Test2.dd);
		
		
		
		long b1 = System.currentTimeMillis();
		Test2.dd=0;
		for(int i=1;i<=maxIndex;i++) {
			Test2.add(i);
		}
		System.out.println(Test2.dd);
		long e1 = System.currentTimeMillis();
		//单线程用时结果
		System.out.println(e1-b1);
	}

}

class Test2{
	public static double dd =0;
	public static synchronized void add(double index) {
			dd =dd + 1/index;
	}
}
class MyThreed implements Runnable{
	private static CountDownLatch countDownLatch;
	private int begin;
	private int end;
	@Override
	public void run() {
		for(int i=begin;i<=end;i++) {
			Test2.add(i);
		}
		countDownLatch.countDown();
	}
	public int getBegin() {
		return begin;
	}
	public void setBegin(int begin) {
		this.begin = begin;
	}
	public int getEnd() {
		return end;
	}
	public void setEnd(int end) {
		this.end = end;
	}
	public static CountDownLatch getCountDownLatch() {
		return countDownLatch;
	}
	public static void setCountDownLatch(CountDownLatch countDownLatch) {
		MyThreed.countDownLatch = countDownLatch;
	}
	
} 

执行结果:

48292
21.300481502328893
21.30048150234855
2068

结果是意外的:多线程表现出来的结果元不如单线程表现的结果
不知道那位大神解释一下?
PS:不是多线程区分太多的原因,各位网友可以测试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值