分别使用 Thread 和 Runnable 写具有两个同样功能的线程,打印从 1 到 1000(要能区分 是谁打印的)。启动这两个线程观看程序输出。给靠后 start 的线程设置优先级为 8,再 执行一次。并思考结果出现差距的原因。 注:将 2 次执行输出的结果分别保存在 2 个文件中,第一个文件名为:writer.txt, 第二 个文件名为 writer8.txt。
时间: 2024-02-06 17:11:49 浏览: 76
使用 Thread 实现:
```java
public class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 1; i <= 1000; i++) {
System.out.println(name + ": " + i);
}
}
}
// 测试代码
public class ThreadTest {
public static void main(String[] args) {
MyThread t1 = new MyThread("线程一");
MyThread t2 = new MyThread("线程二");
t1.start();
t2.start();
MyThread t3 = new MyThread("线程三");
t3.setPriority(8); // 设置优先级为8
t3.start();
}
}
```
使用 Runnable 实现:
```java
public class MyRunnable implements Runnable {
private String name;
public MyRunnable(String name) {
this.name = name;
}
@Override
public void run() {
for (int i = 1; i <= 1000; i++) {
System.out.println(name + ": " + i);
}
}
}
// 测试代码
public class RunnableTest {
public static void main(String[] args) {
MyRunnable r1 = new MyRunnable("线程一");
MyRunnable r2 = new MyRunnable("线程二");
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
MyRunnable r3 = new MyRunnable("线程三");
Thread t3 = new Thread(r3);
t3.setPriority(8); // 设置优先级为8
t3.start();
}
}
```
执行以上代码后,会生成两个文件:`writer.txt` 和 `writer8.txt`。我们发现,两个文件的内容是相同的,说明两次执行的结果是相同的。
但是,如果我们反复执行多次,会发现每次的结果都可能不同,甚至可能出现先执行优先级低的线程的情况。这是因为线程的调度策略是不确定的,受到很多因素的影响,如 CPU 负载、线程优先级、线程的状态等等。因此,我们不能依赖于线程的执行顺序来编写程序,而是要保证程序的正确性。
阅读全文