在Ticket类中重写run()方法,在方法内编写一个while循环。循环体内判断ticket值,当大于0时,使用sleep(long millis)方法使线程休眠1秒钟,并打印:当前线程名称+“正在出售第”+循环次数;否则结束循环。每执行一次while循环,tickets值减一。
时间: 2024-03-13 21:43:44 浏览: 58
好的,以下是修改后的代码:
```java
public class Ticket implements Runnable {
private int tickets = 10;
@Override
public void run() {
int count = 0;
while (tickets > 0) {
try {
Thread.sleep(1000); // 休眠1秒钟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在出售第" + ++count + "张票");
tickets--;
}
}
}
```
在这个代码中,我们在while循环中先使用Thread.sleep()方法使线程休眠1秒钟,然后打印出当前线程名称和卖出的票的编号。注意,在每次循环结束后,我们将tickets值减1。
相关问题
)自定义一个类Ticket,使其实现Runnable接口,并在该类中创建int类型私有属性tickets,赋初值为10。 2)在Ticket类中重写run()方法,在方法内编写一个while循环。循环体内判断ticket值,当大于0时,使用sleep(long millis)方法使线程休眠1秒钟,并打印:当前线程名称+“正在出售第”+循环次数;否则结束循环。每执行一次while循环,tickets值减一。 3)编写测试类Example05_4,在Example05_4类的main()方法中,创建一个Ticket对象,利用Thread的构造方法创建三个线程对象并命名,并开启三个线程的start()方法。
好的,我理解了你的问题。下面是符合你要求的Java代码:
Ticket.java:
```
public class Ticket implements Runnable {
private int tickets = 10;
@Override
public void run() {
int count = 0;
while (tickets > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
System.out.println(Thread.currentThread().getName() + " 正在出售第 " + count + " 张票");
tickets--;
}
}
}
```
Example05_4.java:
```
public class Example05_4 {
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread thread1 = new Thread(ticket, "窗口1");
Thread thread2 = new Thread(ticket, "窗口2");
Thread thread3 = new Thread(ticket, "窗口3");
thread1.start();
thread2.start();
thread3.start();
}
}
```
这段代码创建了一个名为Ticket的类,该类实现了Runnable接口,并包含一个名为tickets的私有int类型属性,其初始值为10。在该类中,重写了run()方法,该方法包含一个while循环,通过判断tickets的值,不断售出票,并在控制台输出当前线程名称和票的编号。当售出所有票时,结束循环。
在Example05_4类中的main()方法中,创建了一个Ticket对象,并利用Thread的构造方法创建了三个线程对象。然后,通过调用Thread对象的start()方法,开启三个线程,让它们执行Ticket对象的run()方法,售出票。
4、电影院票数总共20张,需要有三个窗口同时售票。步骤如下:1.定义一个类Ticket实现Runnable接口,里面定义一个成员变量:private int count = 20; 2.在Ticket类中重写run()方法实现卖票,代码步骤如下: A:判断票数大于0,进行售票,总票数减1。 B:打印“xxx售票成功,剩余票数:xx” 。(xxx为线程名称,xx为剩余票数)。 3.在主函数main中 A:创建Ticket类的对象, B:创建三个Thread类的对象,把Ticket对象作为构造方法的参数,并给出对应的窗口名称, C:启动线程,售票完毕,结束程序。
以下是实现代码:
```java
public class Ticket implements Runnable {
private int count = 20;
@Override
public void run() {
while (count > 0) {
synchronized (this) {
if (count > 0) {
System.out.println(Thread.currentThread().getName() + "售票成功,剩余票数:" + (--count));
}
}
}
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread t1 = new Thread(ticket, "窗口1");
Thread t2 = new Thread(ticket, "窗口2");
Thread t3 = new Thread(ticket, "窗口3");
t1.start();
t2.start();
t3.start();
}
}
```
在这个代码中,我们创建了一个实现了Runnable接口的Ticket类,其中有一个count成员变量表示剩余票数。在run()方法中,我们使用synchronized同步块确保线程安全,判断count是否大于0,如果大于0,就售出一张票,并将count减1,然后打印出售票信息。在主函数main中,我们创建了三个Thread类的对象,分别将Ticket对象作为构造方法的参数,并给出对应的窗口名称,然后启动线程,售票完毕,程序结束。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![csv](https://img-home.csdnimg.cn/images/20210720083646.png)