我要实现的是抢占机制,但是只能是线程1--117线程2--5;或者是线程2--112,线程1--117
时间: 2024-09-23 17:16:43 浏览: 44
如果你想实现一种抢占机制,确保每次只有一次线程1增加`count`为5,线程2增加`count`为112,而不会交错,你可以考虑以下几个步骤:
1. **互斥锁**:在`computel()`和`compute2()`方法内部,使用Java的`synchronized`关键字确保同一时间只有一个线程可以进入临界区(包含`count`更新的部分)。这将保证这两个操作不会同时发生。
```java
public synchronized void computel() {
count += 5;
System.out.println("线程1--" + count);
}
public synchronized void compute2() {
count += 112;
System.out.println("线程2--" + count);
}
```
2. **顺序执行**:为了让线程按特定顺序执行,你可以改变线程的启动顺序,或者使用`join`方法等待一个线程完成后执行另一个。比如,先启动线程1,让它先执行完后再启动线程2。
```java
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
thread1.start();
thread1.join(); // 确保线程1执行完毕
thread2.start();
```
这样一来,你会得到线程1先执行并打印出“线程1--117”,接着线程2执行并打印出“线程2--5”或“线程2--112”。注意,这样的设计虽然实现了你所描述的效果,但在实际场景中,如果`count`不需要实时显示,这种顺序控制可能显得过于复杂,因为它引入了不必要的同步开销。如果需要实时显示结果并且性能是关键,使用更轻量级的信号量或者条件变量可能更适合。
阅读全文