java代码实现:分别使用 Thread 和 Runnable 写具有两个同样功能的线程,打印从 1 到 1000(要能区分 是谁打印的)。启动这两个线程观看程序输出。给靠后 start 的线程设置优先级为 8,再 执行一次。并思考结果出现差距的原因。 注:将 2 次执行输出的结果分别保存在 2 个文件中,第一个文件名为:writer.txt, 第二 个文件名为 writer8.txt。
时间: 2024-02-13 15:05:09 浏览: 60
使用 Thread 实现:
```java
import java.io.FileWriter;
import java.io.IOException;
public class ThreadDemo extends Thread {
private int num;
public ThreadDemo(int num) {
this.num = num;
}
@Override
public void run() {
String threadName = Thread.currentThread().getName();
try (FileWriter writer = new FileWriter("writer.txt", true)) {
for (int i = 1; i <= 1000; i++) {
writer.write(threadName + ": " + i + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ThreadDemo t1 = new ThreadDemo(1);
ThreadDemo t2 = new ThreadDemo(2);
t1.start();
t2.setPriority(8);
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
使用 Runnable 实现:
```java
import java.io.FileWriter;
import java.io.IOException;
public class RunnableDemo implements Runnable {
private int num;
public RunnableDemo(int num) {
this.num = num;
}
@Override
public void run() {
String threadName = Thread.currentThread().getName();
try (FileWriter writer = new FileWriter("writer.txt", true)) {
for (int i = 1; i <= 1000; i++) {
writer.write(threadName + ": " + i + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
RunnableDemo r1 = new RunnableDemo(1);
RunnableDemo r2 = new RunnableDemo(2);
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.setPriority(8);
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在第二次执行时,给后启动的线程设置了较高的优先级,这会导致它被优先调度执行。但是,线程优先级只是给调度器一个提示,不能保证一定会被执行。同时,不同的操作系统和硬件平台可能会有不同的调度策略,也会影响线程执行的顺序。因此,不能完全依赖线程优先级来控制执行顺序。
阅读全文