1. 使用多线程方法创建四个线程实现字段”KELLY 的打印输出,并计算出该字段的出现的概率(3次训练集)。 参考代码: // publc Thread(Strng name) public class HAO_48 extends Thread { public HAO_48(String str) { super(str); } public void run() { for(int i=0;i<10;i++) { System.out.print(""+this.getName()); try { sleep((int)(Math.random()*500)); } catch(InterruptedException e) { System.out.println(e.toString()); } }System.out.println("/"); } public static void main(String[] args) { HAO_48 t1=new HAO_48("H"); HAO_48 t2=new HAO_48("A"); HAO_48 t3=new HAO_48("O"); t1.start(); t2.start(); t3.start(); } }
时间: 2024-01-15 18:05:49 浏览: 93
首先,我们需要明确一下问题要求的意思,即使用多线程方法创建四个线程,每个线程都输出字段 "KELLY",并在输出完成后计算该字段在三次训练集中出现的概率。根据要求,我们可以先编写一个类来实现这个功能:
```
import java.util.Random;
public class KellyPrinter extends Thread {
private static final int TRAINING_SETS = 3; // 训练集数量
private static final int ITERATIONS = 10; // 每个线程的迭代次数
private static int occurrenceCount = 0; // 记录该字段出现的次数
private static final Object lock = new Object(); // 线程锁
public KellyPrinter(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < ITERATIONS; i++) {
System.out.print("KELLY");
try {
sleep(new Random().nextInt(500)); // 随机休眠一段时间
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) { // 对共享变量进行加锁
occurrenceCount++; // 记录该字段出现的次数
}
}
System.out.println();
}
public static void main(String[] args) {
KellyPrinter t1 = new KellyPrinter("Thread 1");
KellyPrinter t2 = new KellyPrinter("Thread 2");
KellyPrinter t3 = new KellyPrinter("Thread 3");
KellyPrinter t4 = new KellyPrinter("Thread 4");
t1.start();
t2.start();
t3.start();
t4.start();
try {
t1.join();
t2.join();
t3.join();
t4.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
double probability = (double) occurrenceCount / (TRAINING_SETS * ITERATIONS); // 计算概率
System.out.println("Probability of 'KELLY' appearing: " + probability);
}
}
```
在这个类中,我们重写了 `run()` 方法来实现输出 "KELLY",并使用 `synchronized` 对共享变量 `occurrenceCount` 进行加锁,以保证线程安全。在 `main()` 方法中,我们创建了四个线程,并启动它们,最后使用 `join()` 方法等待它们执行完成后,根据出现次数和训练集数量计算出现概率并输出。
需要注意的是,由于线程执行的顺序是不确定的,因此每次输出的结果可能会有所不同,但出现概率应该是相近的。
阅读全文