Java中提供了很多种实现同步的方式,请使用同步方法和同步块的方式编写2个多线程程序,来避免因为同时修改数据而引发的问题。
时间: 2024-03-15 22:43:52 浏览: 12
好的,我可以给你提供两个Java多线程程序,一个使用同步方法,另一个使用同步块来避免数据修改引发的问题。
使用同步方法的程序:
```java
public class SynchronizedMethodDemo {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized void decrement() {
count--;
}
public int getCount() {
return count;
}
public static void main(String[] args) throws InterruptedException {
SynchronizedMethodDemo demo = new SynchronizedMethodDemo();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
demo.increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
demo.decrement();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Count: " + demo.getCount());
}
}
```
使用同步块的程序:
```java
public class SynchronizedBlockDemo {
private int count = 0;
public void increment() {
synchronized (this) {
count++;
}
}
public void decrement() {
synchronized (this) {
count--;
}
}
public int getCount() {
return count;
}
public static void main(String[] args) throws InterruptedException {
SynchronizedBlockDemo demo = new SynchronizedBlockDemo();
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
demo.increment();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
demo.decrement();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Count: " + demo.getCount());
}
}
```
这两个程序都有一个共享变量count,通过使用同步方法或同步块来避免多线程修改数据时引发的问题。