编写一个多线程程序,实现这样一个目标:
①存在一个对象,该对象有一个int类型的成员变量counter,该成员变量的初始值为0.
②创建四个线程,其中两个线程对该对象的成员变量counter加1,另外两个线程对该对象的成员变量减1.
③输出该对象成员变量counter每次变化后的值。
④最终输出的结果为:1010101010...
public class MyObject {
private int counter;
public synchronized void increase() {
while (counter == 1) {
try {
wait();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
counter++;
System.out.println(counter);
notify();
}
public synchronized void decrease() {
while (counter == 0) {
try {
wait();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
counter--;
System.out.println(counter);
notify();
}
}
public class DecreaseThread extends Thread {
private MyObject myObject;
public DecreaseThread(MyObject myObject) {
this.myObject = myObject;
}
@Override
public void run() {
for (int i = 0; i < 10; ++i) {
try {
Thread.sleep((long)(Math.random() * 1000));
} catch (InterruptedException ex) {
ex.printStackTrace();
}
myObject.decrease();
}
}
}
public class IncreaseThread extends Thread {
private MyObject myObject;
public IncreaseThread(MyObject myObject) {
this.myObject = myObject;
}
@Override
public void run() {
for (int i = 0; i < 30; ++i) {
try {
Thread.sleep((long)(Math.random() * 1000));
} catch (InterruptedException ex) {
ex.printStackTrace();
}
myObject.increase();
}
}
}
public class Client {
public static void main(String[] args) {
MyObject myObject = new MyObject();
Thread increaseThread = new IncreaseThread(myObject);
Thread increaseThread2 = new IncreaseThread(myObject);
Thread decreaseThread = new DecreaseThread(myObject);
Thread decreaseThread2 = new DecreaseThread(myObject);
increaseThread.start();
increaseThread2.start();
decreaseThread.start();
decreaseThread2.start();
}
}
Java 多线程同步示例:并发修改计数器
本文展示了如何使用 Java 实现一个多线程程序,其中包含一个对象,其成员变量counter作为计数器。程序创建了四个线程,两个线程增加计数器,两个线程减少计数器,并通过`synchronized`关键字确保线程安全。每个线程在操作后打印counter的值,最终输出序列为1010101010...。这个例子演示了Java中的线程同步和并发控制。
10万+

被折叠的 条评论
为什么被折叠?



