基于Java设计解决解决多线程编程进程间同步和互斥问题的代码
时间: 2024-01-15 07:02:51 浏览: 81
使用同步代码块解决以上同步问题-java多线程的讲解
以下是基于Java设计解决多线程编程进程间同步和互斥问题的示例代码。
1. 进程间同步问题的解决
在Java中,我们可以使用synchronized关键字来实现进程间同步。
```java
public class SyncExample {
private int count = 0;
public synchronized void add() {
for (int i = 0; i < 1000000; i++) {
count++;
}
}
public static void main(String[] args) throws InterruptedException {
SyncExample syncExample = new SyncExample();
Thread t1 = new Thread(() -> syncExample.add());
Thread t2 = new Thread(() -> syncExample.add());
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(syncExample.count);
}
}
```
在上面的代码中,我们定义了一个SyncExample类,其中包含了一个count变量和一个add()方法。在add()方法中,我们使用synchronized关键字来保证在任何时刻只有一个线程可以执行该方法。在main()方法中,我们创建了两个线程并启动它们,然后等待它们执行完毕并输出结果。
2. 进程间互斥问题的解决
在Java中,我们可以使用Lock和Condition接口来实现进程间互斥。
```java
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private int count = 0;
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
private boolean flag = false;
public void add() throws InterruptedException {
lock.lock();
try {
while (flag) {
condition.await();
}
for (int i = 0; i < 1000000; i++) {
count++;
}
flag = true;
condition.signal();
} finally {
lock.unlock();
}
}
public static void main(String[] args) throws InterruptedException {
LockExample lockExample = new LockExample();
Thread t1 = new Thread(() -> {
try {
lockExample.add();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread t2 = new Thread(() -> {
try {
lockExample.add();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(lockExample.count);
}
}
```
在上面的代码中,我们定义了一个LockExample类,其中包含了一个count变量和一个add()方法。在add()方法中,我们首先获取锁,然后使用while循环来判断是否满足某个条件,如果不满足则调用condition.await()方法等待其他线程的通知。当满足条件时,我们对count变量进行1000000次加1操作,然后将flag标记为true并调用condition.signal()方法通知其他线程条件已经满足。在main()方法中,我们创建了两个线程并启动它们,然后等待它们执行完毕并输出结果。
阅读全文