Java 线程问题在线等 急需求代码 50
第1部分使用joint()1、为MyMathsClass类编写一个实用方法,对于输入的两个数字(一小一大),要求求取区间内所有数字的和。2、求和的实现过程应当分为多个区间...
第1部分
使用joint()
1、为MyMathsClass类编写一个实用方法,对于输入的两个数字(一小一大),要求求取区间内所有数字的和。
2、求和的实现过程应当分为多个区间将由5个以上线程实现,例如对于输入的20和70:
线程1求20-30的和
线程2求31-40的和
线程3求41-50的和
线程4求51-60的和
线程4求61-70的和
提示:你将需要用到joint方法
第2部分
实现一个多线队列的示例程序,用于解释课堂中有关“栈”实例的讨论。 展开
使用joint()
1、为MyMathsClass类编写一个实用方法,对于输入的两个数字(一小一大),要求求取区间内所有数字的和。
2、求和的实现过程应当分为多个区间将由5个以上线程实现,例如对于输入的20和70:
线程1求20-30的和
线程2求31-40的和
线程3求41-50的和
线程4求51-60的和
线程4求61-70的和
提示:你将需要用到joint方法
第2部分
实现一个多线队列的示例程序,用于解释课堂中有关“栈”实例的讨论。 展开
1个回答
展开全部
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;
public class ForkJoin extends RecursiveTask<Integer> {
/**
*
*/
private static final long serialVersionUID = -6162301641016381533L;
private Integer minNum;
private Integer maxNum;
private Integer numCountPerTask;
private boolean isStart;
public ForkJoin(Integer minNum, Integer maxNum, Integer numCountPerTask, boolean isStart) {
this.minNum = minNum;
this.maxNum = maxNum;
this.numCountPerTask = numCountPerTask;
this.isStart = isStart;
}
@Override
protected Integer compute() {
List<ForkJoinTask<Integer>> queue = new ArrayList<>();
Integer taskCount = (maxNum-minNum)/(numCountPerTask - 1);
if(taskCount == 0){
taskCount = (maxNum-minNum)%(numCountPerTask - 1) > 0 ? 1 : 0;
if(taskCount == 0){
return 0;
}
}
Integer sum = 0;
if(taskCount == 1){
for(int i = minNum; i <= maxNum; i++){
sum += i;
}
}else{
for(int i = 1; i <= taskCount; i++){
Integer paramMaxNum = 0;
if(i != taskCount){
paramMaxNum = minNum + numCountPerTask;
}else{
paramMaxNum = maxNum;
}
if(i == 1){
isStart = true;
}else{
isStart = false;
}
ForkJoin fj = new ForkJoin(isStart ? minNum : (minNum + 1), paramMaxNum, numCountPerTask, isStart);
ForkJoinTask<Integer> jft = fj.fork();
queue.add(jft);
minNum = minNum + numCountPerTask;
}
}
if(!queue.isEmpty()){
for(ForkJoinTask<Integer> fjt: queue){
sum += fjt.join();
}
}
return sum;
}
public static void main(String[] args) {
ForkJoin fj = new ForkJoin(20, 70, 10, true);
Integer res = fj.compute();
System.out.println(res);
}
}
第二题不是很明了 是要干嘛
追问
第一部分是一道题,第二部分是一道题(自由发挥的实现要求即可)。能给做做吗,可以提高悬赏。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询