package cn.everest.thread;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class OperateThreadShareDate2 {
public static void main(String[] args) {
Resource resource = new Resource();
IncreData increData = new IncreData(resource);
DecreData decreData = new DecreData(resource);
for (int i = 0; i < 2; i++) {
new Thread(increData).start();
new Thread(decreData).start();
}
}
}
class IncreData implements Runnable {
private Resource resource;
public IncreData(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
resource.increment();
}
}
}
class DecreData implements Runnable {
private Resource resource;
public DecreData(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
resource.decrement();
}
}
}
class Resource {
private int x = 0;
private boolean flag = false;
public Resource() {
}
final Lock lock = new ReentrantLock();
Condition increCondition = lock.newCondition();
Condition decreCondition = lock.newCondition();
public void increment() {
lock.lock();
try {
while (flag) {
increCondition.await();
}
x = x + 1;
System.out.println("x +++++++++++++++++++++++: " + x);
flag = !flag;
decreCondition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
} // end increment
public void decrement() {
lock.lock();
try {
while (!flag) {
decreCondition.await();
}
x = x - 1;
System.out.println("x ------------: " + x);
flag = !flag;
increCondition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
} // end decrement
} // end Resource
四线程加一减一问题(JDK1.5)
最新推荐文章于 2022-02-10 21:51:07 发布
本文介绍了一个使用Java实现的线程同步示例,通过ReentrantLock和Condition确保两个线程(增减操作线程)对共享资源进行有序且互斥的操作。该示例展示了如何在多线程环境中正确地使用锁机制来避免竞态条件。
653

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



