java多线程练习题
时间: 2023-10-29 12:05:21 浏览: 67
引用中的代码是一个Java多线程练习题,其中实现了三个线程A、B、C,每个线程依次输出字母和数字的组合。这里使用了原子计数器和公平锁来确保输出的顺序正确。
引用中的代码是另一个Java多线程练习题,其中实现了一个容器类,提供了add和count两个方法。一个线程用来添加元素到容器中,另一个线程用来监控容器中元素的个数,当个数达到5时给出提示并结束。
引用中的代码展示了一个可能导致死锁的情况。当线程T1获取对象a的锁后睡眠1秒,然后线程T2获取对象b的锁后尝试获取对象a的锁时,由于线程T1还持有对象a的锁,线程T2会被阻塞。同样地,线程T1在获取对象b的锁时也会被阻塞,导致两个线程都无法继续执行下去,程序无法正常结束。
相关问题
java多线程练习题基础
1. 编写一个程序,在一个线程中打印数字1到100,在另一个线程中打印字母A到Z。
2. 编写一个程序,在一个线程中打印奇数,在另一个线程中打印偶数,直到100。
3. 编写一个程序,使用两个线程交替打印数字1到10,例如:线程1打印1,线程2打印2,线程1打印3,线程2打印4,以此类推。
4. 编写一个程序,使用多个线程模拟抢购场景,每个线程表示一个抢购者,当商品数量为0时停止抢购。
5. 编写一个程序,使用多个线程模拟生产者和消费者场景,生产者线程负责生产产品,消费者线程负责消费产品,当产品数量达到一定值时停止生产,当产品数量为0时停止消费。
java原子性练习题
当涉及到多线程编程时,保证原子性是非常重要的。Java提供了一些原子操作类来实现原子性,比如AtomicInteger、AtomicLong、AtomicBoolean等。这些类提供了一些方法来执行原子操作,确保操作的完整性。
以下是一个Java原子性练习题的示例:
假设有一个共享变量count,初始值为0。现在有两个线程同时对count进行自增操作,每个线程自增100次。请问最终count的值是多少?
解答:
使用AtomicInteger类可以保证自增操作的原子性。可以使用以下代码来解决这个问题:
```java
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicExercise {
private static AtomicInteger count = new AtomicInteger(0);
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 100; i++) {
count.incrementAndGet();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 100; i++) {
count.incrementAndGet();
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("Final count: " + count.get());
}
}
```
运行以上代码,最终输出的count值应该是200。