实现一个两个线程听音乐和读新闻得程序,要求听音乐线程先执行输出5次,然后在读新闻程序中中断听音乐线程得输出
时间: 2024-09-09 11:13:27 浏览: 37
要实现这样一个程序,我们可以使用Java中的线程控制来完成。首先,我们创建一个用于听音乐的线程类,这个类会在其运行方法中输出5次,然后休眠一段时间,以便等待中断信号。接下来,我们创建一个读新闻的线程类,这个类在运行时将首先发送中断信号给听音乐的线程,然后继续执行其任务。
下面是具体的实现方法:
1. 定义一个`MusicPlayer`类,它实现了`Runnable`接口。在这个类中,我们覆写`run`方法,使得线程可以输出5次音乐信息,之后休眠一段时间。
```java
public class MusicPlayer implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("播放音乐: " + (i + 1));
try {
Thread.sleep(1000); // 模拟播放音乐需要时间
} catch (InterruptedException e) {
System.out.println("音乐播放被中断");
break; // 如果线程被中断,则退出循环
}
}
}
}
```
2. 定义一个`NewsReader`类,同样实现了`Runnable`接口。在这个类的`run`方法中,我们调用`MusicPlayer`线程的`interrupt`方法来发送中断信号,然后输出新闻信息。
```java
public class NewsReader implements Runnable {
private Thread musicPlayer;
public NewsReader(Thread musicPlayer) {
this.musicPlayer = musicPlayer;
}
public void run() {
try {
// 尝试中断音乐播放线程
musicPlayer.interrupt();
Thread.sleep(2000); // 等待一段时间后再继续
} catch (InterruptedException e) {
System.out.println("新闻阅读被中断");
}
System.out.println("开始读新闻");
// 这里可以添加读新闻的代码
}
}
```
3. 在主方法中,我们创建两个线程,分别对应`MusicPlayer`和`NewsReader`类,并启动它们。
```java
public class Main {
public static void main(String[] args) {
MusicPlayer musicPlayer = new MusicPlayer();
Thread musicThread = new Thread(musicPlayer);
NewsReader newsReader = new NewsReader(musicThread);
Thread newsThread = new Thread(newsReader);
// 启动音乐播放线程
musicThread.start();
// 等待一段时间后启动读新闻线程
try {
Thread.sleep(3000); // 假设我们希望音乐播放3秒后再开始读新闻
newsThread.start();
} catch (InterruptedException e) {
System.out.println("主线程被中断");
}
}
}
```
这段代码将首先启动听音乐的线程,听音乐线程将输出5次后休眠1秒钟,这时读新闻的线程会启动并中断音乐播放线程,然后继续执行读新闻的操作。
阅读全文