4.线程间的数据共享:模拟航空售票。程序填空:利用Runnable接口实现铁路售票模拟程序,假设我们的总票数15张。 class ThreadSale implements Runnable { private int tickets=15; //总票数 public void run() { while(true) { if(tickets>0) //如果有票可售 System.out.println(Thread.currentThread().getName()+"出售车票第"+tickets--+"张"); else System.exit(0); } } } public class TicketSale2 { public static void main (String[] args) { 【1】创建一个实现接口的售票类对象t 写出代码: //用此对象t作为参数创建3个线程,第二参数为线程名称 【2】创建线程t1,线程名称为"第1个售票窗口" 写出代码: Thread t2=new Thread(t,"第2个售票窗口"); Thread t3=new Thread(t,"第3个售票窗口"); 【3】启动线程t1 写出代码: t2.start(); t3.start(); } }
时间: 2024-03-21 12:40:48 浏览: 60
答案如下:
```java
class ThreadSale implements Runnable {
private int tickets = 15; // 总票数
public void run() {
while (true) {
synchronized(this) { // 加锁
if (tickets > 0) { // 如果有票可售
System.out.println(Thread.currentThread().getName() + "出售车票第" + tickets-- + "张");
} else {
System.exit(0);
}
}
}
}
}
public class TicketSale2 {
public static void main(String[] args) {
ThreadSale t = new ThreadSale(); // 创建一个实现接口的售票类对象t
Thread t1 = new Thread(t, "第1个售票窗口"); // 用此对象t作为参数创建3个线程,第二参数为线程名称
Thread t2 = new Thread(t, "第2个售票窗口");
Thread t3 = new Thread(t, "第3个售票窗口");
t1.start(); // 启动线程t1
t2.start();
t3.start();
}
}
```
解释:在run方法中需要加锁,避免多个线程同时访问tickets变量导致数据不一致。在main方法中创建一个ThreadSale对象t,用此对象t作为参数创建3个线程,分别为t1、t2、t3,并启动线程t1、t2、t3。
阅读全文