多线程编程实验报告,求Java代码,跟运行结果截图,Java实验报告

晚上好🌙🌙🌙
本答案参考ChatGPT-3.5
实验五多线程编程
一、实验目的
1.掌握线程类的定义和使用方法; 2.能够解决线程调度、线程同步等问题; 3.能够选择使用合适的线程类和接口设计多线程程序完成相关操作,解决特定问题。
二、课程目标
支撑课程目标(4):了解Java开发主流平台、工具的特点、使用方法和局限性,能够借助DE等工具完成程序的调试、测试,敢于质疑,具有实践验证、评价优化的能力,体现软件质量意识。
三、实验任务
运动员1贡献1分,目前学院总分为1分 运动员3贡献2分,目前学院总分为3分 运动员2贡献5分,目前学院总分为8分 运动员8贡献0分,目前学院总分为8分 运动员7贡献4分,目前学院总分为32分
解决方案:
Java 代码:
import java.util.Random;
class School {
private String name;
private int score;
public School(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
class Athlete implements Runnable {
private String name;
private int score;
private School school;
public Athlete(String name, School school) {
this.name = name;
this.school = school;
this.score = new Random().nextInt(6);
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
public void addScore() {
school.setScore(school.getScore() + score);
System.out.println(name + "贡献" + score + "分,目前" + school.getName() + "总分为" + school.getScore() + "分");
}
@Override
public void run() {
addScore();
}
}
public class Main {
public static void main(String[] args) {
School software = new School("软件学院", 0);
for (int i = 1; i <= 10; i++) {
new Thread(new Athlete("运动员" + i, software)).start();
}
}
}
2.为提高效率,某工厂配备了机器人搬运货物。请定义一个机器人Robot线程类,模拟m个机器人搬运size件货物。要求:
输入样例:103
输出搬运过程,包括机器人编号(1~m)和搬运的货物编号(1~size)。
输出样例:
Robot1已搬运:货物0 Robot2已搬运:货物1 Robot3已搬运:货物2 Robot3已搬运:货物3 Robot2已搬运:货物4 ...
解决方案:
Java 代码:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class Robot implements Runnable {
private int num;
public Robot(int num) {
this.num = num;
}
@Override
public void run() {
for (int i = 0; i < Main.size; i++) {
Main.lock.lock();
try {
if (Main.current < Main.size && Main.goods[Main.current] == i) {
System.out.println("Robot" + num + "已搬运:货物" + Main.current);
Main.current++;
}
} finally {
Main.lock.unlock();
}
}
}
}
public class Main {
public static int size = 103;
public static volatile int current = 0;
public static Lock lock = new ReentrantLock();
public static int[] goods = new int[size];
public static void main(String[] args) {
for (int i = 0; i < size; i++) {
goods[i] = i % 3 == 0 ? i : -1;
}
int m = 3;
for (int i = 1; i <= m; i++) {
new Thread(new Robot(i)).start();
}
}
}
3.团结就是力量。一年级小学生已经学会了100以内加法,现在老师要求计算1~100的和,4个小朋友决定分工合作,每人求出25个数的和,第一个小朋友从1加到25,第二个小朋友从26加到50,第三个小朋友从51加到75,第四个小朋友从76加到100,然后把4个和加起来。
请编程模拟这个过程,要求输出信息包括:
输出样例:
1计算的结果为325 2计算的结果为950 3计算的结果为1575 4计算的结果为2300 总计算结果为5150
解决方案:
Java 代码:
class Sum implements Runnable {
private int num;
private int start;
private int end;
private int result;
public Sum(int num, int start, int end) {
this.num = num;
this.start = start;
this.end = end;
}
public int getResult() {
return result;
}
@Override
public void run() {
for (int i = start; i <= end; i++) {
result += i;
}
System.out.println(num + "计算的结果为" + result);
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(new Sum(1, 1, 25));
Thread t2 = new Thread(new Sum(2, 26, 50));
Thread t3 = new Thread(new Sum(3, 51, 75));
Thread t4 = new Thread(new Sum(4, 76, 100));
t1.start();
t2.start();
t3.start();
t4.start();
t1.join();
t2.join();
t3.join();
t4.join();
int result = t1.isAlive() ? 0 : ((Sum) t1.getRunnable()).getResult();
result += t2.isAlive() ? 0 : ((Sum) t2.getRunnable()).getResult();
result += t3.isAlive() ? 0 : ((Sum) t3.getRunnable()).getResult();
result += t4.isAlive() ? 0 : ((Sum) t4.getRunnable()).getResult();
System.out.println("总计算结果为" + result);
}
}