编写两个线程类,分别命名为First和Second,可选用继承Thread类或者执行Runnable接口的方法创建这两个线程类,线程可循环3次输出自己线程的名字; 编写主类Test声明创建两个线程类的对象,测试这两个线程对象在以下条件下的运行结果。 A.将两个线程设为同优先级,比较运行情况。 B.将两个线程设为不同优先级,比较运行情况。 C.将两个线程设为同优先级,比较线程调用sleep()之后的运行情况。
时间: 2024-03-01 13:51:07 浏览: 18
下面是用继承Thread类的方式实现的代码,其中First和Second类分别实现了线程的run()方法,主类Test中创建了这两个线程对象并启动它们:
```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) throws InterruptedException {
First f = new First();
Second s = new Second();
// A. 同优先级
f.setPriority(Thread.NORM_PRIORITY);
s.setPriority(Thread.NORM_PRIORITY);
f.start();
s.start();
f.join();
s.join();
// B. 不同优先级
f.setPriority(Thread.MIN_PRIORITY);
s.setPriority(Thread.MAX_PRIORITY);
f.start();
s.start();
f.join();
s.join();
// C. 同优先级,调用sleep()
f.setPriority(Thread.NORM_PRIORITY);
s.setPriority(Thread.NORM_PRIORITY);
f.start();
Thread.sleep(1000);
s.start();
f.join();
s.join();
}
}
```
在A条件下,两个线程都是同优先级,输出的结果可能会交替出现,具体取决于操作系统的调度。在B条件下,将First线程的优先级设为最小,将Second线程的优先级设为最大,此时Second线程的运行次数可能会比First线程多一些。在C条件下,先启动First线程,然后让当前线程(即主线程)休眠1秒钟,最后启动Second线程,此时First线程可能会输出3次,Second线程可能只输出1~2次,因为前一个线程已经占用了一定的CPU时间。