请大侠提供源代码!谢谢了!
三个类:
加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/