java实现互斥和顺序控制
时间: 2024-06-11 17:09:33 浏览: 7
Java中可以使用synchronized关键字实现互斥和顺序控制。
1. 互斥
synchronized关键字可以用来保证同一时刻只有一个线程可以访问共享资源,从而实现互斥。
例如:
```java
public class Test {
private static int count = 0;
private static Object lock = new Object();
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
synchronized (lock) {
count++;
System.out.println(count);
}
}).start();
}
}
}
```
在上面的例子中,多个线程同时对count进行自增操作,但是由于对count的访问加了synchronized同步锁,所以同一时刻只有一个线程可以访问count,从而实现了互斥。
2. 顺序控制
synchronized关键字还可以用来实现线程的顺序控制。例如,我们可以使用wait()和notify()方法来实现线程的等待和唤醒操作,从而实现线程的顺序控制。
例如:
```java
public class Test {
private static Object lock = new Object();
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
synchronized (lock) {
System.out.println("线程1开始执行");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1继续执行");
}
});
Thread t2 = new Thread(() -> {
synchronized (lock) {
System.out.println("线程2开始执行");
lock.notify();
System.out.println("线程2唤醒了线程1");
}
});
t1.start();
t2.start();
}
}
```
在上面的例子中,线程1和线程2加了同步锁lock。线程1执行完System.out.println("线程1开始执行")之后,调用lock.wait()方法进入等待状态。线程2执行完System.out.println("线程2开始执行")之后,调用lock.notify()方法唤醒线程1,线程1继续执行System.out.println("线程1继续执行")。从而实现了线程的顺序控制。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)