package com.lxxu.testthread;
class AddThread implements Runnable{
private Resource resource;
public AddThread(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
for(int i=0;i<50;i++){
try {
this.resource.add();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
class SubThread implements Runnable{
private Resource resource;
public SubThread(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
for(int i=0;i<50;i++){
try {
this.resource.sub();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
class Resource{//定义一个操作的资源
private int num = 0;//要进行加减操作的数据
private boolean flag = true;//加减的切换
//true 加 flase减
public synchronized void add() throws Exception{
while(this.flag==false){
super.wait();
}
Thread.sleep(100);
this.num++;
System.out.println("【加法操作 "+Thread.currentThread().getName()+" 】num="+this.num);
this.flag = false;
super.notifyAll();
}
public synchronized void sub() throws Exception{
while(this.flag==true){
super.wait();
}
Thread.sleep(200);
this.num--;
System.out.println("【减法操作 "+Thread.currentThread().getName()+"】num="+this.num);
this.flag = true;
super.notifyAll();
}
}
public class ThreadDemoX {
public static void main(String[] args) {
Resource resource = new Resource();
AddThread at = new AddThread(resource);
SubThread st = new SubThread(resource);
new Thread(at,"线程A").start();
new Thread(at,"线程B").start();
new Thread(st,"线程X").start();
new Thread(st,"线程Y").start();
}
}