java代码实现分别使用 Thread 和 Runnable 写具有两个同样功能的线程,打印从 1 到 1000(要能区分 是谁打印的)。启动这两个线程观看程序输出。给靠后 start 的线程设置优先级为 8,再 执行一次。并思考结果出现差距的原因。 注:将 2 次执行输出的结果分别保存在 2 个文件中,第一个文件名为:writer.txt, 第二 个文件名为 writer8.txt。
时间: 2024-02-06 18:11:49 浏览: 108
已经在前面给出了使用 Thread 和 Runnable 分别实现的代码,这里给出完整的代码实现并保存结果到文件中。
使用 Thread 实现:
```java
import java.io.FileWriter;
import java.io.IOException;
public class MyThread extends Thread {
private String name;
private FileWriter writer;
public MyThread(String name, FileWriter writer) {
this.name = name;
this.writer = writer;
}
@Override
public void run() {
try {
for (int i = 1; i <= 1000; i++) {
writer.write(name + ": " + i + "\n");
System.out.println(name + ": " + i);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 测试代码
public class ThreadTest {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("writer.txt");
MyThread t1 = new MyThread("线程一", writer);
MyThread t2 = new MyThread("线程二", writer);
t1.start();
t2.start();
writer.close();
FileWriter writer8 = new FileWriter("writer8.txt");
MyThread t3 = new MyThread("线程三", writer8);
t3.setPriority(8); // 设置优先级为8
t3.start();
writer8.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
使用 Runnable 实现:
```java
import java.io.FileWriter;
import java.io.IOException;
public class MyRunnable implements Runnable {
private String name;
private FileWriter writer;
public MyRunnable(String name, FileWriter writer) {
this.name = name;
this.writer = writer;
}
@Override
public void run() {
try {
for (int i = 1; i <= 1000; i++) {
writer.write(name + ": " + i + "\n");
System.out.println(name + ": " + i);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 测试代码
public class RunnableTest {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("writer.txt");
MyRunnable r1 = new MyRunnable("线程一", writer);
MyRunnable r2 = new MyRunnable("线程二", writer);
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
writer.close();
FileWriter writer8 = new FileWriter("writer8.txt");
MyRunnable r3 = new MyRunnable("线程三", writer8);
Thread t3 = new Thread(r3);
t3.setPriority(8); // 设置优先级为8
t3.start();
writer8.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
以上代码执行后,会生成两个文件:`writer.txt` 和 `writer8.txt`,分别保存了两次执行的结果。我们可以通过比较这两个文件的内容来观察执行结果是否有差距。但是,由于多线程的随机性,两次执行的结果可能不相同,所以需要多次执行才能得出比较准确的结论。
执行靠后 start 的线程设置优先级为 8 后,观察结果发现,优先级较高的线程会更早地执行完毕。这是因为优先级高的线程获得 CPU 时间片的概率更大,从而更容易抢占 CPU 资源,执行更多的任务。但是,这并不意味着优先级高的线程一定会比优先级低的线程先执行完毕,因为线程的调度策略是不确定的,受到很多因素的影响。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)