JAVA中什么关键字可以让对象在任何时刻只u由一个线程访问
时间: 2024-03-03 07:46:53 浏览: 83
java多线程有序读取同一个文件
5星 · 资源好评率100%
在Java中,可以使用 `synchronized` 关键字让对象在任何时刻只能由一个线程访问。`synchronized` 关键字可以用于方法或代码块中,用于实现线程的同步。
当一个方法或代码块被 `synchronized` 关键字修饰时,它被称为同步方法或同步代码块。在同步方法或同步代码块中,只有一个线程可以访问该方法或代码块,其他线程必须等待该线程执行完毕后才能访问。
例如,下面的代码演示了如何使用 `synchronized` 关键字实现线程的同步:
```java
class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
class MyThread extends Thread {
private Counter counter;
public MyThread(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
counter.increment();
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
MyThread thread1 = new MyThread(counter);
MyThread thread2 = new MyThread(counter);
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println(counter.getCount()); // 输出 2000
}
}
```
在这个例子中,首先定义了一个 `Counter` 类,包含了一个计数器 `count`,以及一个使用 `synchronized` 关键字修饰的 `increment()` 方法和一个使用 `synchronized` 关键字修饰的 `getCount()` 方法。`increment()` 方法用于将计数器加 1,`getCount()` 方法用于获取计数器的值。
然后定义了一个 `MyThread` 类,继承自 `Thread` 类,用于执行计数器的增加操作。在 `Main` 类中,创建了两个 `MyThread` 对象,传入同一个 `Counter` 对象,启动这两个线程并等待它们执行完毕后打印计数器的值。
运行这个程序可以看到,无论有多少个线程同时访问计数器,都能够保证计数器的值是正确的,这是因为 `increment()` 和 `getCount()` 方法都被 `synchronized` 关键字修饰,保证了同一时刻只有一个线程可以访问这些方法。
阅读全文