「java多线程累加」java多线程累加计数
今天给各位分享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多线程累加计数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。