1.使用AtomicInteger进行线程间数据共享:
package threads;
import java.util.concurrent.atomic.AtomicInteger;
/**
* @author alchimie
*
* 三个线程交替打印A、B、C
*/
public class XunleiThread1 extends Thread {
private final String str[] = { "A", "B", "C" };
private final static AtomicInteger atomI = new AtomicInteger();
public XunleiThread1(String name) {
this.setName(name);
}
@Override
public void run() {
while (true) {
// 满10次退出打印
if (atomI.get() / 3 == 10) {
break;
}
synchronized (atomI) {
// 顺序打印A、B、C
if (str[atomI.get() % 3].equals(getName())) {
atomI.getAndIncrement();
System.out.println(getName());
if ("C".equals(getName())) {
System.out.println();
}
// 当前线程打印打印完成后唤醒其它线程
atomI.notifyAll();
} else {
// 非顺序线程wait()
try {
atomI.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) {
new XunleiThread1("A").start();
new XunleiThread1("B").start();
new XunleiThread1("C").start();
}
}