自己的解法:
public class FourThread {
private int j;
Object o = new Object();
class A extends Thread {
@Override
public void run() {
synchronized (o) {
j++;
System.out.println(Thread.currentThread().getName() + "执行加:"
+ j);
}
}
}
class B extends Thread {
@Override
public void run() {
synchronized (o) {
j++;
System.out.println(Thread.currentThread().getName() + "执行加:"
+ j);
}
}
}
class C extends Thread {
@Override
public void run() {
synchronized (o) {
j--;
System.out.println(Thread.currentThread().getName() + "执行减:"
+ j);
}
}
}
class D extends Thread {
@Override
public void run() {
synchronized (o) {
j--;
System.out.println(Thread.currentThread().getName() + "执行减:"
+ j);
}
}
}
public static void main(String[] args) {
FourThread fo = new FourThread();
A a = fo.new A();
B b = fo.new B();
C c = fo.new C();
D d = fo.new D();
a.start();
b.start();
c.start();
d.start();
}
}
解法有点蠢,精简下。
public class FourThread2 {
private int j;
public synchronized void increase() {
j++;
System.out.println(Thread.currentThread().getName() + "执行加:" + j);
}
public synchronized void reduce() {
j--;
System.out.println(Thread.currentThread().getName() + "执行减:" + j);
}
class IncThread implements Runnable {
public void run() {
increase();
}
}
class RedThread implements Runnable {
public void run() {
reduce();
}
}
public static void main(String[] args) {
FourThread2 test = new FourThread2();
IncThread inc = test.new IncThread();
RedThread red = test.new RedThread();
Thread thread = null;
for (int i = 0; i < 2; i++) {
thread = new Thread(inc);
thread.start();
thread = new Thread(red);
thread.start();
}
}
}