java针对一个资源,创建多个线程来处理同一个事件

本文通过Java实现了一个简单的车站售票系统并发模拟程序。该程序利用多线程技术,创建了四个售票窗口同时进行售票操作,初始票数为1,最大票数限制为100。演示了如何使用Runnable接口来实现资源共享的多线程处理。

//针对一个资源,创建多个线程来处理同一个事件,

//此处用车站售票系统·

package 课外体例;

public class StationSystem {
public static void main(String[] arg)
{
Thread t = new Thread(new Tickets());


//Tickets t = new Tickets();

Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);

t1.start();
t2.start();
t3.start();
t4.start();

}
}

class Tickets implements Runnable
{
private int tickets = 1;
public void run()
{
while(true)
{
if(tickets <= 100)
System.out.println(Thread.currentThread().getName()+"销售第"+tickets+++"票");
else
break;
}
}

}


学习攻城的一只小猿,路遇大神,还望指点,谢谢!

### Java线程同时调用同一接口的方法 #### 使用`Runnable`接口实现多线程共享目标对象 当多个线程需要执行相同的逻辑并作用于共同的据源时,推荐使用`Runnable`接口。这种方式允许不同线程实例化同一个实现了`Runnable`的目标对象,并传递给各自的`Thread`对象启动。 ```java // 定义一个实现了Runnable接口的任务类 class Task implements Runnable { private final String resourceName; public Task(String name) { this.resourceName = name; } @Override public void run() { synchronized (resourceName.intern()) { // 确保同步块针对的是唯一的锁对象 try { System.out.println(Thread.currentThread().getName() + " is processing resource: " + resourceName); Thread.sleep(1000); // 模拟耗时操作 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } } ``` 为了使多个线程能够安全地访问和修改公共资源,在上述代码中加入了`synchronized`关键字来控制临界区[^1]。这里特别注意对字符串常量池中的唯一表示形式进行了锁定(`synchronized(resourceName.intern())`),以确保即使不同的线程传入相同名称的资源也会被视作同一线程序列化执行。 接着创建若干个线程并将它们指向同一个任务实例: ```java public static void main(String[] args) throws InterruptedException { int threadCount = 5; // 假设有五个并发线程 String sharedResource = "sharedData"; List<Thread> threads = new ArrayList<>(); for (int i = 0; i < threadCount; ++i) { Thread t = new Thread(new Task(sharedResource), "Thread-" + i); threads.add(t); t.start(); // 启动各个子线程 } // 主线程等待所有子线程完成工作后再继续往下走 for (Thread t : threads) { t.join(); } } ``` 这种方法不仅让程序结构更加清晰合理,而且由于只存在单一的任务定义,便于维护与扩展。 #### 注意事项 - **资源共享冲突**:对于可能引发竞争条件的关键区域应当采取适当措施加以保护,比如利用内置锁机制(即`synchronized`)、显式锁或是原子变量等工具。 - **线程安全性**:设计时应考虑到线程间通信的需求以及潜在的风险点,必要情况下引入额外的状态标志位或其他协调手段保障一致性。 - **性能优化**:过多频繁地创建销毁线程会带来较大的开销,建议考虑采用现成的线程池框架如`Executors.newFixedThreadPool()`来进行管理,提高效率的同时也简化了编程模型[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值