/4.线程)员工张三有两个主管, 主管A和主管B经常会根据张三的表现给他调工资,有可能增加或减少。 试用两个线程来执行主管A和主管B给张三调工资的工作,请使用线程同步解决数据完整性问题。/
时间: 2023-12-06 09:42:40 浏览: 40
下面是一个使用Java的例子:
```java
public class Employee {
private int salary;
private final Object lock = new Object(); // 创建一个对象锁
public void increaseSalary(int amount) {
synchronized (lock) { // 在需要同步的代码块中使用对象锁
salary += amount;
}
}
public void decreaseSalary(int amount) {
synchronized (lock) { // 在需要同步的代码块中使用对象锁
salary -= amount;
}
}
}
public class SupervisorA implements Runnable {
private final Employee employee;
private final int amount;
public SupervisorA(Employee employee, int amount) {
this.employee = employee;
this.amount = amount;
}
@Override
public void run() {
employee.increaseSalary(amount);
}
}
public class SupervisorB implements Runnable {
private final Employee employee;
private final int amount;
public SupervisorB(Employee employee, int amount) {
this.employee = employee;
this.amount = amount;
}
@Override
public void run() {
employee.decreaseSalary(amount);
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Employee employee = new Employee();
SupervisorA supervisorA = new SupervisorA(employee, 1000);
SupervisorB supervisorB = new SupervisorB(employee, 500);
Thread threadA = new Thread(supervisorA);
Thread threadB = new Thread(supervisorB);
threadA.start();
threadB.start();
threadA.join();
threadB.join();
System.out.println("Final salary: " + employee.getSalary());
}
}
```
在这个例子中,我们创建了一个Employee类来表示员工,它有一个salary属性和两个用于增加或减少salary的方法:increaseSalary和decreaseSalary。在这两个方法中,我们使用了一个对象锁来保证同步性。这个对象锁可以是任何对象,这里我们使用了Employee类的一个成员变量lock。
然后,我们创建了两个Runnable实现类SupervisorA和SupervisorB,分别表示主管A和主管B。每个实现类都有一个Employee对象和一个amount参数,表示要增加或减少的薪资数额。在run方法中,我们分别调用了Employee对象的increaseSalary和decreaseSalary方法来修改薪资。
最后,我们在主函数中创建了两个Thread对象来运行SupervisorA和SupervisorB的实例。我们使用了join方法来等待线程执行完毕,并打印出最终的salary值。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)