synchronized 使用例子
时间: 2023-12-07 11:37:12 浏览: 87
以下是Java中使用synchronized关键字实现简单同步操作的例子:
1. synchronized修饰函数
```java
public class Example {
public synchronized void method() {
// 代码块
}
}
```
2. synchronized修饰代码块
```java
public class Example {
public void method() {
synchronized (this) {
// 代码块
}
}
}
```
3. synchronized修饰静态方法
```java
public class Example {
public static synchronized void method() {
// 代码块
}
}
```
注意:synchronized关键字可以修饰方法、代码块和静态方法,用于实现多线程同步操作,保证线程安全。
相关问题
synchronized使用示例
好的,下面是用 synchronized 关键字实现线程同步的示例:
```java
public class SynchronizedExample {
private int count = 0;
public synchronized void increment() {
count++;
}
public static void main(String[] args) throws InterruptedException {
SynchronizedExample obj = new SynchronizedExample();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
obj.increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
obj.increment();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Count: " + obj.count);
}
}
```
这个示例中,我们定义了一个 `SynchronizedExample` 类,其中有一个计数变量 `count`。我们使用 `synchronized` 修饰 `increment()` 方法来实现线程同步,确保多个线程同时访问这个方法时不会发生数据竞争。然后,我们在 `main` 方法中启动两个线程 `t1` 和 `t2`,它们分别调用 `increment()` 方法来对 `count` 变量进行累加操作。最后,我们使用 `join()` 方法等待所有线程执行完成,并输出最终的计数结果 `count`。
希望这个示例能够解决您的疑问,如果您有其他问题,欢迎继续提问。
synchronized示例
`synchronized`关键字在Java中用于同步代码块或方法,确保在同一时间只有一个线程能访问特定的资源或代码段。这是通过内部创建一个锁来实现的,可以防止多个线程并发修改共享数据导致的数据不一致。
**示例1:同步方法**
```java
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
```
在这个例子中,`increment()` 和 `getCount()` 都被`synchronized`修饰,保证了对`count`变量的原子操作,不会同时有多个线程修改它。
**示例2:同步代码块**
```java
public class SharedResource {
private int resource;
// 共享资源获取并处理
public void processResource(int id) {
synchronized (this) { // 锁定当前对象
if (id == 1) {
processTaskOne();
} else {
processTaskTwo();
}
}
}
private void processTaskOne() {
// 单线程处理任务一
}
private void processTaskTwo() {
// 单线程处理任务二
}
}
```
这里,`processResource`内部的同步代码块会锁定对象`this`,确保同一时刻只有一个线程执行这个代码块。
阅读全文