1.编写程序,需要满足下面要求: (1)编写两个线程类,分别命名为First和Second,可选用继承Thread类或者执行Runnable接口的方法创建这两个线程类,线程可循环3次输出自己线程的名字; (2)编写主类Test声明创建两个线程类的对象,测试这两个线程对象在以下条件下的运行结果。 A.将两个线程设为同优先级,比较运行情况。 B.将两个线程设为不同优先级,比较运行情况。 C.将两个线程设为同优先级,比较线程调用sleep()之后的运行情况。
时间: 2024-03-01 15:53:07 浏览: 58
以下是Java代码实现:
```java
class First extends Thread {
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("First");
}
}
}
class Second extends Thread {
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("Second");
}
}
}
public class Test {
public static void main(String[] args) {
First f = new First();
Second s = new Second();
// A.同优先级
f.setPriority(Thread.NORM_PRIORITY);
s.setPriority(Thread.NORM_PRIORITY);
f.start();
s.start();
// B.不同优先级
f.setPriority(Thread.MAX_PRIORITY);
s.setPriority(Thread.MIN_PRIORITY);
f.start();
s.start();
// C.sleep()
f.setPriority(Thread.NORM_PRIORITY);
s.setPriority(Thread.NORM_PRIORITY);
try {
f.start();
Thread.sleep(1000);
s.start();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
解释一下代码:
首先定义了两个线程类 First 和 Second,分别继承自 Thread 类,实现了 run 方法。在 run 方法中,每个线程循环输出自己的名字三次。
然后在主类 Test 中,先创建了 First 和 Second 的对象 f 和 s。接着进行三个实验:
A.将两个线程设为同优先级,比较运行情况。
这里将两个线程都设为普通优先级(即 Thread.NORM_PRIORITY),然后分别启动两个线程。由于它们优先级相同,因此不能保证哪个线程先运行。实际运行结果可能会交错输出。
B.将两个线程设为不同优先级,比较运行情况。
这里将 First 线程设为最高优先级(即 Thread.MAX_PRIORITY),将 Second 线程设为最低优先级(即 Thread.MIN_PRIORITY),然后分别启动两个线程。由于 First 线程优先级高,因此它会更容易被 CPU 执行。在实际运行中,First 线程可能会先于 Second 线程输出。
C.将两个线程设为同优先级,比较线程调用sleep()之后的运行情况。
这里将两个线程都设为普通优先级(即 Thread.NORM_PRIORITY),然后先启动 First 线程,然后让主线程睡眠 1 秒钟,最后再启动 Second 线程。由于主线程睡眠了 1 秒钟,因此 First 线程有更多的时间来执行,Second 线程可能会晚于 First 线程输出。
阅读全文