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

2026-02-15 21:15:02 :0

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

“java多线程计算”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看java多线程计算(java中怎样实现多线程执行的结果相加)!

本文目录

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;i《end+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;i《10;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 多线程 求和

分类: 电脑/网络 》》 程序设计 》》 其他编程语言
问题描述:

我编写的一段代码,基本上已经实现多线程求和

可是没办法返回每个线程求和之后得出的值

我的目的毕竟是求总的和,不是每个线程的和

import java.io.*;
class testthread extends Thread

{ int b=null;

public testthread(int a){b=a;}

public void run()

{int sum=0;

for (int i = 0; i《b.length; i++)

{

sum=sum+b;

}

System.out.println(sum);

}

}

public class thread {

/**

* @param args

*/

public static void main(String args) {

TODO 自动生成方法存根

try{

System.out.print("输入线程数 p(p》=2):");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String A=(String)br.readLine();

int p=Integer.parseInt(A);

System.out.print("输入求和数 n:");

BufferedReader cr=new BufferedReader(new InputStreamReader(System.in));

String B=(String)cr.readLine();

String x = B.split(" ") ;

int ;

for (int i = 0; i《x.length; i++)

{

n).intValue() ;

}

int c=n.length/p;

int a; 定义一个多维数组

int b=0;

for(int i=0;i《p;i++) 将n中元素赋值给多维数组

for(int j=0;j《c;j++)

{a;b++;}

for(int i=0;i《p;i++) 测试多维数组输出

{for(int j=0;j《c;j++)

{System.out.print(a+" "); }

System.out.println();

}

for(int i=0;i《p;i++) 创建线程

new testthread(a).start();

}catch(IOException e){}

}

}

解析:

帮你帮到底,你凑合着看看吧

package test;

import java.io.*;

class testthread

extends Thread {

int b = null;

public testthread(int a) {

b = a;

}

public void run() {

int sum = 0;

for (int i = 0; i 《 b.length; i++) {

sum = sum + b;

}

System.out.println(sum);

thread.tnumInc(sum);

}

}

public class thread {

private static int ready = 0;

private static int tnum = 0;

private static int SUM = 0;

static synchronized void tnumInc(int p)

{

ready++;

SUM += p;

if(ready》=tnum){

System.out.println(SUM);

}

}

/**

* @param args

*/

public static void main(String args) {

TODO 自动生成方法存根

try {

System.out.print("输入线程数 p(p》=2):");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String A = (String) br.readLine();

int p = Integer.parseInt(A);

tnum = p;

System.out.print("输入求和数 n:");

BufferedReader cr = new BufferedReader(new InputStreamReader(System.in));

String B = (String) cr.readLine();

String x = B.split(" ");

int;

for (int i = 0; i 《 x.length; i++) {

n).intValue();

}

int c = n.length / p;

int a; 定义一个多维数组

int b = 0;

for (int i = 0; i 《 p; i++) 将n中元素赋值给多维数组

for (int j = 0; j 《 c; j++) {

a;

b++;

}

for (int i = 0; i 《 p; i++) { 测试多维数组输出

for (int j = 0; j 《 c; j++) {

System.out.print(a + " ");

}

System.out.println();

}

for (int i = 0; i 《 p; i++) 创建线程

new testthread(a).start();

}

catch (IOException e) {}

}

}

随便写写,没有测试过。你自己调调看吧。

大概思路就是给一个方法合并结果,并对已经完成的thread进行计数

当完成的thread的数量==总数的时候,最后结果就出来了

Java 实现多线程的几种方式汇总

有三种:
(1)继承Thread类,重写run函数
创建:
class xx extends Thread{
public void run(){
Thread.sleep(1000)//线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源
}}
开启线程:
对象.start()//启动线程,run函数运行
(2)实现Runnable接口,重写run函数
开启线程:
Thread t = new Thread(对象)//创建线程对象
t.start()
(3)实现Callable接口,重写call函数
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
Callable和Runnable有几点不同:
①Callable规定的方法是call(),而Runnable规定的方法是run().
②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
③call()方法可抛出异常,而run()方法是不能抛出异常的。
④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等
待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果

如何判断java多线程是否全部执行完了,并计

思路: 把所有的线程都放到线程池里面
步骤:
1: 创建线程池 ExecutorService cachedThreadPool
2: 开启一个线程 cachedThreadPool.execute(new Runnable() {//做任务})
3.: 判断线程池里面是否执行完, cachedThreadPool.isTerminated()
while (true) {
if (cachedThreadPool.isTerminated()) { // 计算耗时
long time = System.currentTimeMillis() - start;
System.out.println(":" + "程序结束了,总耗时:" + time + " ms(毫秒)!\n");
break;
}
}

java 多线程访问数组求和

public class T
{
 int input={100,5,98,77,60,88,36};  
 int output={0,0,0,0,0,0,0};  
 int curr = 0;
 
 public synchronized int getCurr() {
  if( curr== input.length )
   return -1;
  return curr++;
 }
 
 
 static class Worker extends Thread
 {
  T t;
  public Worker(T t) {
   this.t = t;
  }
  
  public void run() {
   int idx; 
   while( (idx=t.getCurr()) != -1 ) {
    int sum = 0;
    for(int i=0; i《t.input; i++ ) {
     sum += i;
    }
    t.output = sum;
   }
   System.out.println( getName() + " over" );
  }
 }
 
 public static void main(String args) throws Exception{
  T t = new T();
  Thread t1 = new Worker(t);
  Thread t2 = new Worker(t);
  Thread t3 = new Worker(t);
  t1.start();
  t2.start();
  t3.start();
  t1.join();
  t2.join();
  t3.join();
  for(int i=0; i《t.output.length; i++) {
   System.out.print( t.output + "," );
  }
  System.out.println();
 }
}

Java单多线程求pair值算法比较

   进程和线程的概念

   什么是进程

  一个进程就是在一个运行的程序 它有自己独立的内存空间 一组系统资源 每个进程的内部数据和状态都是独立的 例如在window是同时打开多个记事本 虽然它们所运行的程序代码都是一样的 但是所使用的内存空间是独立的 互不干扰

   什么是线程

  线程与进程相似 是一段完成某个特定功能的代码 是程序中单个顺序的流控制;但与进程不同的是 同类的多个线程共享一块内存空间和一组系统资源 而线程本身的数据通常只有微处理器的寄存器数据 以及一个供程序执行时使用的堆栈

   进程与线程的区别

   进程:每个进程都有独立的代码和数据空间(进程上下文) 进程切换的开销大

   线程:轻量的进程 同一类线程共享代码和数据空间 每个线程有独立的运行栈和程序计数器(PC) 线程切换的开销小

   多进程:在操作系统中 能同时运行多个任务程序

   多线程:在同一应用程序中 有多个顺序流同时执行

   线程创建的两种方式

  采用继承Thread类创建线程

  该方法比较简单 主要是通过继承java lang Thread类 并覆盖Thread类的run()方法来完成线成的创建 Thread 类是一个具体的类 即不是抽象类 该类封装了线程的行为 要创建一个线程 程序员必须创建一个从 Thread 类导出的新类 Thread类中有两个最重要的函数run()和start()

  通过实现Runnable接口创建线程

  该方法通过生成实现java lang Runnable接口的类 该接口只定义了一个方法run() 所以必须在新类中实现它 但是 Runnable 接口并没有任何对线程的支持 我们还必须创建 Thread 类的实例 这一点通过 Thread 类的构造函数

  public Thread(Runnable target);来实现

   单线程和多线程性能比较

  以使用蒙特卡罗概率算法求π为例 进行单线程和多线程时间比较

   什么是蒙特卡罗概率算法

  蒙特卡罗法(Monte Carlo method)是以概率和统计的理论 方法为基础的一种计算方法 将所求解的问题同一定的概率模型相联系 用电子计算机实现统计模拟或抽样 以获得问题的近似解 故又称统计模拟法或统计试验法 百度百科

  蒙特卡罗求算法求π

  第一步

  画正方形和内切圆

  第二步

  变换表达式

  正方形面积As=( R)^

  圆的面积Ac=πR^

  Ac/As=( R)^ /πR^

  π= As/Ac

  令P=As/Sc 则π= P

  第三步

  重复N次实验求平均值

  在正方形区域内随机生成一个点A 若A落在圆区域内 M++

  P=M/N

  π= P N的取值越大 π的值越精确

   java代码实现算法

  N取值为 万 多线程的数为 每个线程执行 万次模拟实验

  线程实现

  import ncurrent CountDownLatch;

  public class ProModel implements Runnable {

  public int N;//随机实验的总次数

  public static int M;//随机点落在圆中的次数

  private int id;

  private final CountDownLatch doneSignal;

  OBJ semaphore;

  public ProModel(int id CountDownLatch doneSignal int N OBJ semaphore ){

  this id=id;

  this doneSignal=doneSignal;

  this N=N;

  this semaphore=semaphore ;

  M= ;

  }

  public void run(){

  int tempM= ;

  for(int i= ;i《N;i++){

  if(isInCircle()){

  tempM++;

  }

  }

  synchronized (semaphore) {

  add(tempM);

  }

  untDown();//使end状态减

  }

  public  void add(int tempM){

  System out println(Thread currentThread() getName());

  M=M+tempM;

  System out println(M);

  }

  //随机产生一个在正方形区域的点 判断它是否在圆中

  public boolean isInCircle(){

  double x=Math random();

  double y=Math random();

  if((x )*(x )+(y )*(y )《 )

  return true;

  else

  return false;

  }

  public static int getTotal(){

  return M;

  }

  }

  多线程Main实现

  import ncurrent CountDownLatch;

  import ncurrent ExecutorService;

  import ncurrent Executors;

  public class MutliThread {

  public static void main(String args) throws InterruptedException {

  long begin=System currentTimeMillis();

  int threadSize= ;

  int N= ;

  OBJ semaphore = new OBJ();

  CountDownLatch doneSignal  = new CountDownLatch(threadSize);

  ProModel;

  //设置特定的线程池 大小为threadSizde

  System out println( begins! );

  ExecutorService exe = Executors newFixedThreadPool(threadSize);

  for(int i= ;i《threadSize;i++)

  exe execute(new ProModel(i+ doneSignal N semaphore));

  try{

  doneSignal await();            //等待end状态变为            }catch (InterruptedException e) {

  // TODO: handle exception

  e printStackTrace();

  }finally{

  System out println( ends! );

  System out println( *(float)ProModel getTotal()/(float)(threadSize*N));

  }

  exe shutdown();

  long end=System currentTimeMillis();

  System out println( used time(ms): +(end begin));

  }

  }

  class OBJ{}

  单线程Main实现

  import ncurrent CountDownLatch;

  import ncurrent ExecutorService;

  import ncurrent Executors;

  public class SingleThread {

  public static void main(String args) {

  long begin=System currentTimeMillis();

  int threadSize= ;

  int N= ;

  OBJ semaphore = new OBJ();

  CountDownLatch doneSignal  = new CountDownLatch(threadSize);

  ProModel;

  //设置特定的线程池 大小为

  System out println( begins! );

  ExecutorService exe = Executors newFixedThreadPool(threadSize);

  for(int i= ;i《threadSize;i++)

  exe execute(new ProModel(i+ doneSignal N semaphore));

  try{

  doneSignal await();            //等待end状态变为            }catch (InterruptedException e) {

  // TODO: handle exception

  e printStackTrace();

  }finally{

  System out println( ends! );

  System out println( *(float)ProModel getTotal()/(float)(threadSize*N));

  }

  exe shutdown();

  long end=System currentTimeMillis();

  System out println( used time(ms): +(end begin));

  }

  }

  运行结果比较

lishixinzhi/Article/program/Java/gj/201311/27648

如果你还想了解更多这方面的信息,记得收藏关注本站。

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

本文编辑:admin

更多文章:


易优cms安全码(易优cms判断用户有没有登陆)

易优cms安全码(易优cms判断用户有没有登陆)

本篇文章给大家谈谈易优cms安全码,以及易优cms判断用户有没有登陆对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录易优cms判断用户有没有登陆易优交易所安全吗易优cms判断用户有没有登陆题主可能想问“易优cms判断用户有没有

2026年9月24日 18:15

数据类型分类有哪些(数据的分类)

数据类型分类有哪些(数据的分类)

大家好,数据类型分类有哪些相信很多的网友都不是很明白,包括数据的分类也是一样,不过没有关系,接下来就来为大家分享关于数据类型分类有哪些和数据的分类的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录数据的分类数据有哪

2025年11月21日 02:00

flash源码 爱心(超简单的flash画心方法)

flash源码 爱心(超简单的flash画心方法)

大家好,今天小编来为大家解答以下的问题,关于flash源码 爱心,超简单的flash画心方法这个很多人还不知道,现在让我们一起来看看吧!本文目录超简单的flash画心方法怎么在flash mx里画爱心怎么使用flash绘制心形用flash制

2025年10月29日 23:30

tcpip协议内核(tcpip协议详解 tcpip协议具体包括哪些内容)

tcpip协议内核(tcpip协议详解 tcpip协议具体包括哪些内容)

大家好,今天小编来为大家解答以下的问题,关于tcpip协议内核,tcpip协议详解 tcpip协议具体包括哪些内容这个很多人还不知道,现在让我们一起来看看吧!本文目录tcpip协议详解 tcpip协议具体包括哪些内容TCP/ IP的七层协议

2025年10月17日 21:00

strike怎么读音(strike的过去分词是什么)

strike怎么读音(strike的过去分词是什么)

本篇文章给大家谈谈strike怎么读音,以及strike的过去分词是什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录strike的过去分

2025年8月29日 09:45

python切片举例(如何使用Python中的变量对列表进行切片)

python切片举例(如何使用Python中的变量对列表进行切片)

大家好,今天小编来为大家解答以下的问题,关于python切片举例,如何使用Python中的变量对列表进行切片这个很多人还不知道,现在让我们一起来看看吧!本文目录如何使用Python中的变量对列表进行切片python中slice数据类型是什么

2026年9月9日 06:00

分段函数图像怎么画(如何利用几何画板画分段函数图像)

分段函数图像怎么画(如何利用几何画板画分段函数图像)

各位老铁们好,相信很多人对分段函数图像怎么画都不是特别的了解,因此呢,今天就来为大家分享下关于分段函数图像怎么画以及如何利用几何画板画分段函数图像的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录如何利用几何画板画

2025年10月29日 03:00

php写一个网站要多久(想在两周内完成一个网站(PHP))

php写一个网站要多久(想在两周内完成一个网站(PHP))

其实php写一个网站要多久的问题并不复杂,但是又很多的朋友都不太了解想在两周内完成一个网站(PHP),因此呢,今天小编就来为大家分享php写一个网站要多久的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录想在两周内

2025年5月24日 11:15

deliberate中文(关于一句中文该如何翻译)

deliberate中文(关于一句中文该如何翻译)

大家好,deliberate中文相信很多的网友都不是很明白,包括关于一句中文该如何翻译也是一样,不过没有关系,接下来就来为大家分享关于deliberate中文和关于一句中文该如何翻译的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我

2025年11月13日 00:45

structured reviewing翻译(紧急求助,英语高手帮忙翻译一下这篇英文,急用谢谢不要翻译软件的)

structured reviewing翻译(紧急求助,英语高手帮忙翻译一下这篇英文,急用谢谢不要翻译软件的)

“structured reviewing翻译”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看structured reviewing翻译(紧急求助,英语高手帮忙翻译一下这篇英文,急用谢谢不要翻译软件的)!本文目录紧急求助,

2025年5月25日 07:45

vlookup函数怎么用来查找(excel中vlookup怎么查找)

vlookup函数怎么用来查找(excel中vlookup怎么查找)

各位老铁们好,相信很多人对vlookup函数怎么用来查找都不是特别的了解,因此呢,今天就来为大家分享下关于vlookup函数怎么用来查找以及excel中vlookup怎么查找的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧

2025年7月10日 11:15

erp管理系统公司(erp系统是哪个公司的)

erp管理系统公司(erp系统是哪个公司的)

各位老铁们好,相信很多人对erp管理系统公司都不是特别的了解,因此呢,今天就来为大家分享下关于erp管理系统公司以及erp系统是哪个公司的的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录erp系统是哪个公司的er

2026年1月19日 04:30

java可以干什么兼职(java工程师能干什么)

java可以干什么兼职(java工程师能干什么)

本篇文章给大家谈谈java可以干什么兼职,以及java工程师能干什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录java工程师能干什么兼

2026年7月14日 12:00

如何使用通配符(在word中查找、定位和替换,怎样使用通配符)

如何使用通配符(在word中查找、定位和替换,怎样使用通配符)

大家好,如果您还对如何使用通配符不太了解,没有关系,今天就由本站为大家分享如何使用通配符的知识,包括在word中查找、定位和替换,怎样使用通配符的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录在word中查找、定位

2025年8月5日 04:00

职业生涯规划书ppt模板免费下载(大学生职业生涯规划ppt模板)

职业生涯规划书ppt模板免费下载(大学生职业生涯规划ppt模板)

“职业生涯规划书ppt模板免费下载”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看职业生涯规划书ppt模板免费下载(大学生职业生涯规划ppt模板)!本文目录大学生职业生涯规划ppt模板职业生涯规划ppt职业生涯规划书ppt模

2025年11月25日 13:30

周期函数的积分性质((考研数学)周期函数的积分性质是什么)

周期函数的积分性质((考研数学)周期函数的积分性质是什么)

今天给各位分享(考研数学)周期函数的积分性质是什么的知识,其中也会对(考研数学)周期函数的积分性质是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录(考研数学)周期函数的积分性质是什么周期函数的定积分的一个

2026年5月10日 04:30

手机context修复是啥(修复selinux contexts什么意思)

手机context修复是啥(修复selinux contexts什么意思)

大家好,今天小编来为大家解答以下的问题,关于手机context修复是啥,修复selinux contexts什么意思这个很多人还不知道,现在让我们一起来看看吧!本文目录修复selinux contexts什么意思手机中context可以修复

2025年7月24日 18:00

移动智能电子学生证怎么添加号码(智慧校园电子学生证如何添加号码)

移动智能电子学生证怎么添加号码(智慧校园电子学生证如何添加号码)

本篇文章给大家谈谈移动智能电子学生证怎么添加号码,以及智慧校园电子学生证如何添加号码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录智慧校园

2026年7月1日 10:45

swift教学(编程如何自学)

swift教学(编程如何自学)

大家好,关于swift教学很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于编程如何自学的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录编程如何自学如何学

2025年9月1日 01:00

转化16进制计算器(二进制如何转16进制)

转化16进制计算器(二进制如何转16进制)

本篇文章给大家谈谈转化16进制计算器,以及二进制如何转16进制对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录二进制如何转16进制计算器如何

2026年6月6日 02:00

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索