public class ThreadDemo {
public static void main(String[] args) throws InterruptedException {
Resource res = new Resource();
PlusThread pt = new PlusThread(res);
MinusThread mt = new MinusThread(res);
new Thread(pt,"加法A").start();
new Thread(pt,"加法B").start();
new Thread(mt,"减法C").start();
new Thread(mt,"减法D").start();
}
}
class Resource{
private int num = 0;
private boolean flag = true;//加减切换,true表示加,false表示减
public synchronized void plus() {
if(this.flag == false) {
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.num ++;
System.out.println(Thread.currentThread().getName() + " num:" + this.num);
this.flag = false;
super.notifyAll();//唤醒全部线程
}
public synchronized void minus() {
if(this.flag == true) {
try {
super.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.num --;
System.out.println(Thread.currentThread().getName() + " num:" + this.num);
this.flag = true;
super.notifyAll();//
}
}
class PlusThread implements Runnable{
private Resource res;
public PlusThread(Resource res) {
this.res = res;
}
public void pulsR() {
for(int x = 0;x < 50;x ++) {
this.res.plus();
}
}
@Override
public void run() {
this.pulsR();
}
}
class MinusThread implements Runnable{
private Resource res;
public MinusThread(Resource res) {
this.res = res;
}
public void MinusR() {
for(int x = 0;x < 50;x ++) {
this.res.minus();
}
}
@Override
public void run() {
this.MinusR();
}
}
结合数据同步,锁机制,等待和休眠进行完成
四个线程,两个加减法线程对数据加减的调度模拟
猜你喜欢
转载自blog.csdn.net/qq_27347147/article/details/84782156
今日推荐
周排行