Java多线程并发问题:死锁和活锁的示例
在Java多线程编程中,死锁和活锁是常见的并发问题。以下分别提供一个死锁和活锁的简单示例。
- 死锁示例(基于银行系统场景):
// 定义资源
Resource account1 = new Resource("Account 1", 100));
Resource account2 = new Resource("Account 2", 50));
// 定义线程,每个线程都需要资源
Thread thread1 = new Thread(new Worker(account1)));
Thread thread2 = new Thread(new Worker(account2)));
// 启动线程
thread1.start();
thread2.start();
// 这里不会执行,因为会形成死锁:线程1需要账户1,但账户已被线程2占用;同理,线程2也无法获得释放。
- 活锁示例(基于购物车场景):
// 定义资源
Resource cart = new Resource("Shopping Cart", 5));
// 定义线程,每个线程都需要资源
Thread thread1 = new Thread(new Worker(cart)));
Thread thread2 = new Thread(new Worker(cart)));
// 启动线程
thread1.start();
thread2.start();
// 这里会形成活锁:线程1和线程2交替执行,每次都会尝试将自己需要的资源放入购物车中。但由于资源有限(购物车容量5),所以始终无法成功。
以上就是Java多线程并发问题:死锁和活锁的示例。
还没有评论,来说两句吧...