「java多线程累加」java多线程累加计数

博主:adminadmin 2023-01-24 21:06:08 374

今天给各位分享java多线程累加的知识,其中也会对java多线程累加计数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA多线程累加

ExecutorService threadPool2 = Executors.newFixedThreadPool(10);

ExecutorCompletionServiceInteger executorCompletionService = new ExecutorCompletionServiceInteger(

threadPool2);

for (int i = 0; i  10; i++) {

executorCompletionService.submit(new CallableInteger() {

@Override

public Integer call() throws Exception {

int sum = 0;

for (int j = 0; j  10; j++) {

sum += new Random().nextInt(1000);

}

System.out.println("num:" + sum);

return sum;

}

});

}

int sum = 0;

for (int i = 0; i  10; i++) {

try {

int num = executorCompletionService.take().get();

sum += num;

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

}

System.out.println("sum:" + sum);

java用多线程实现累加求和

在楼上基础上大概改一下,增加同步处理。

public class Test extends Thread {

static int n = 0;

private int startNum = 0 ;

public Test (int sn)

{

this.startNum = sn ;

}

public static synchronized void addSum (int num)

{

n += num ;

}

public static void main(String[] args) {

Thread [] thList = new Thread [10] ;

for (int i = 0; i 10; i ++) {

thList [i] = new Test(i * 10 + 1) ;

thList [i].start();

}

for (int i = 0 ; i 10 ; i ++)

{

thList [i].join () ;

}

System.out.println ("Sum is : " + n) ;

}

public void run() {

int sum = 0 ;

for (int i = 0; i 10; ++i) {

sum += sn + i ;

}

addSum (sum) ;

}

}

帮帮忙!java中多线程运行累加和程序问题

因为循环次数大致一样,不论new Thread(p).start();有多少,i++这行语句都大约执行了30000次,如果只有一个new,则在一个线程中执行30000次i++,如果有2个new,在两个线程中一共执行大约30000次i++,每个线程不可能执行30000次i++,因为另外一个现成的i++也会改变i的值。

关键一点是,循环变量在各个线程中都是相同的,是同一个i,所以总循环次数是大致一样的。

之所以说大致一样,是因为在i++执行过程中线程调度的几率很小。如果恰好在这个时候调度,那么循环次数就不会是30000

java中怎样实现多线程执行的结果相加

import java.util.concurrent.BrokenBarrierException;

import java.util.concurrent.CyclicBarrier;

/**

单独的计算线程,比如计算{1...10}的相加

@author zhaohb

*/

public class CounterThread extends Thread{

private int start;

private int end;

private CyclicBarrier barrier ;

public CounterThread(int id,int start, int end,CyclicBarrier barrier) {

this.start = start;

this.end = end;

this.barrier = barrier;

setName("Thread-"+id+" ");

}

@Override

public void run() {

int count = 0;

for(int i=start;iend+1;i++){

count += i;

}

Counter.totalCount(count);

try {

barrier.await();

} catch (InterruptedException e) {

e.printStackTrace();

} catch (BrokenBarrierException e) {

e.printStackTrace();

}

}

}

import java.util.concurrent.CyclicBarrier;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

/**

测试类入口

@author zhaohb

*/

public class CounterTest {

public static void main(String[] args) {

//CyclicBarrier指定了当10个线程运行结束时候,可以进行最后结果展示了

CyclicBarrier barrier = new CyclicBarrier(10,new TotalTask(new Counter()));

ExecutorService executorService = Executors.newCachedThreadPool();

for(int i=0;i10;i++){

int start = i*10+1;

int end = start + 9;

CounterThread counterThread = new CounterThread(i,start, end,barrier);

executorService.execute(counterThread);

}

executorService.shutdown();

}

}

/**

线程结果计算:将单独的线程的计算的结果相加,汇总的到总的结果

@author zhaohb

*

*/

class Counter {

private static int count =0;

public synchronized static int totalCount(int perCount){

count += perCount;

return count;

}

public int totalResult(){

return count;

}

}

/**

最后结算展示线程

@author zhb

*

*/

class TotalTask implements Runnable{

private Counter counter ;

public TotalTask(Counter counter){

this.counter = counter;

}

@Override

public void run() {

System.out.println("所有线程运行完毕,总结果为:");

int total = counter.totalResult();

System.out.println(total);

}

}

java编程题目:实现多线程累加,求代码

照着下面的例子改一下:

/**

* 实现Runnable接口的类

*

* @author leizhimin 2008-9-13 18:12:10

*/

publicclass DoSomethingimplements Runnable {

private String name;

public DoSomething(String name) {

this.name = name;

}

publicvoid run() {

for (int i = 0; i 5; i++) {

for (long k = 0; k 100000000; k++) ;

System.out.println(name + ": " + i);

}

}

}

/**

* 测试Runnable类实现的多线程程序

*

* @author leizhimin 2008-9-13 18:15:02

*/

publicclass TestRunnable {

publicstaticvoid main(String[] args) {

DoSomething ds1 = new DoSomething("阿三");

DoSomething ds2 = new DoSomething("李四");

Thread t1 = new Thread(ds1);

Thread t2 = new Thread(ds2);

t1.start();

t2.start();

}

}

执行结果:

李四: 0

阿三: 0

李四: 1

阿三: 1

李四: 2

李四: 3

阿三: 2

李四: 4

阿三: 3

阿三: 4

Process finished with exit code 0

2、扩展Thread类实现的多线程例子

/**

* 测试扩展Thread类实现的多线程程序

*

* @author leizhimin 2008-9-13 18:22:13

*/

publicclass TestThreadextends Thread{

public TestThread(String name) {

super(name);

}

publicvoid run() {

for(int i = 0;i5;i++){

for(long k= 0; k 100000000;k++);

System.out.println(this.getName()+" :"+i);

}

}

publicstaticvoid main(String[] args) {

Thread t1 = new TestThread("阿三");

Thread t2 = new TestThread("李四");

t1.start();

t2.start();

}

}

执行结果:

阿三 :0

李四 :0

阿三 :1

李四 :1

阿三 :2

李四 :2

阿三 :3

阿三 :4

李四 :3

李四 :4

Process finished with exit code 0

关于java多线程累加和java多线程累加计数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。