设计2个线程,其中一个线程每次对j增加1,另外一个线程对j每次减少1

请大侠提供源代码!谢谢了!

三个类:

加1:
[code="java"]import java.util.concurrent.atomic.AtomicInteger;

public class AddNum extends Thread {
private AtomicInteger i;

public AddNum(AtomicInteger i) {
    this.i = i;
}

@Override
public void run() {
    synchronized (i) {
        i.getAndIncrement();
        System.out.println(i);
    }
}

}[/code]

减1:

[code="java"]import java.util.concurrent.atomic.AtomicInteger;

public class SubstractNum extends Thread {
private AtomicInteger i;

public SubstractNum(AtomicInteger i) {
    this.i = i;
}

@Override
public void run() {
    synchronized (i) {
        i.decrementAndGet();
        System.out.println(i);
    }
}

}[/code]

测试类:
[code="java"]import java.util.concurrent.atomic.AtomicInteger;

public class TestThread {

public static void main(String[] args) {
    AtomicInteger i = new AtomicInteger(30);

    for (int j = 0; j < 1000; j++) {
        new AddNum(i).start();
        new SubstractNum(i).start();
    }
}

}[/code]

[code="java"]import java.util.concurrent.*;
/**

  • 通过内部类实现线程的共享变量
  • */

    public class ThreadTest { //测试类
    public static void main(String[] args) {
    ExecutorService exec = Executors.newCachedThreadPool();//线程池
    Mythread thread = new Mythread();
    exec.execute(thread.getThread());//执行线程Thread
    exec.execute(thread.getThreadAnother());//执行线程ThreadAnother
    exec.shutdown();//不许再提交新的线程。
    }

    }

    class Mythread {

    int index = 0; // 共享变量

    private class InnerThread extends Thread { //内部类

    public synchronized void run() {

    while(true)

    try {
    System.out.println(Thread.currentThread().getName()

    + "is running and index is " + index++); //++1
    TimeUnit.MICROSECONDS.sleep(1000*100);//休眠
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }   
    

    }

    private class InnerThreadAnother extends Thread { //内部类
    public synchronized void run() {

    while (true) {

    try {
    TimeUnit.MICROSECONDS.sleep(1000*100);//休眠
    System.out.println(Thread.currentThread().getName()

    + "is running and index is " + index--); //减减1
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }

    }
    public Thread getThreadAnother() {

    return new InnerThreadAnother();

    }

    public Thread getThread() {

    return new InnerThread();

    }

    } [/code]

参考这里讲的多线程间通信的两个方法:共享变量及管道流
[url=http://blog.csdn.net/sodino/archive/2009/07/27/4383916.aspx]http://blog.csdn.net/sodino/archive/2009/07/27/4383916.aspx[/url]

自己动手啊,

提供个学习资料集
http://www.ibm.com/developerworks/cn/java/j-concurrent/