多线程卖票例子

Thread1类:

package com.maipiao2;

public class Thread1 extends Thread {
	static int target = 0;

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while (target < 100) {
			target++;
			System.out.println(Thread.currentThread().getName()+"卖出了"+target+"张票");
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

Test类:

package com.maipiao2;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Thread1().start();

		new Thread1().start();
		new Thread1().start();
		new Thread1().start();
		new Thread1().start();
		new Thread1().start();
		new Thread1().start();
		new Thread1().start();
	}

}

以下是使用 Java 多线程线程池实现卖票功能的示例代码: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; // 定义个实现 Runnable 接口的 Ticket 类,用于表示卖票任务 class Ticket implements Runnable { // 总票数,初始化为 100 private int ticket = 100; @Override public void run() { while (true) { // 同步代码块,确保线程安全 synchronized (this) { // 判断是否还有票 if (ticket > 0) { try { // 模拟卖票操作的时间消耗 Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } // 输出当前线程名和剩余票数 System.out.println(Thread.currentThread().getName() + " 卖出了第 " + ticket + " 张票,还剩下 " + (--ticket) + " 张票"); } else { // 若没有票了,跳出循环 break; } } } } } public class TicketSellingWithThreadPool { public static void main(String[] args) { // 创建个固定大小为 5 的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建 Ticket 对象 Ticket ticket = new Ticket(); // 向线程池提交 5 个卖票任务 for (int i = 0; i < 5; i++) { executorService.submit(ticket); } // 关闭线程池 executorService.shutdown(); } } ``` 在上述代码中,首先定义了个 `Ticket` 类实现 `Runnable` 接口,其中 `ticket` 变量表示总票数。`run` 方法包含个 `while` 循环,通过 `synchronized` 同步代码块来保证线程安全。在 `main` 方法中,使用 `Executors.newFixedThreadPool(5)` 创建了个固定大小为 5 的线程池,然后将 `Ticket` 对象作为任务提交给线程池执行,最后调用 `executorService.shutdown()` 关闭线程池。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值