四条线程加减
两条加线程和两条减线程
package demo;
class addThreads implements Runnable{
private Resources re;
public addThreads(Resources re) {
// TODO Auto-generated constructor stub
this.re = re;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 50; i++) {
try {
this.re.add();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class subThreads implements Runnable{
private Resources re;
public subThreads(Resources re) {
// TODO Auto-generated constructor stub
this.re = re;
}
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 50; i++) {
try {
this.re.sub();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Resources{
private int num = 0;
private boolean flag = false;
public synchronized void add() throws InterruptedException{
while(this.flag == false) {
super.wait();
}
Thread.sleep(100);
this.num++;
System.out.println(Thread.currentThread().getName()+"-- ="+num);
this.flag = false;
super.notifyAll();
}
public synchronized void sub() throws InterruptedException{
while(this.flag == true) {
super.wait();
}
Thread.sleep(100);
this.num--;
System.out.println(Thread.currentThread().getName()+"-- ="+num);
this.flag = true;
super.notifyAll();
}
}
public class ThreadDemo {
public static void main(String []args) throws Exception{
Resources resources = new Resources();
new Thread(new addThreads(resources),"加法线程--A").start();
new Thread(new addThreads(resources),"加法线程--B").start();
new Thread(new subThreads(resources),"减法线程--X").start();
new Thread(new subThreads(resources),"减法线程--Y").start();
}
}