import java.util.concurrent.atomic.AtomicInteger;
public class ResourceTest {
//线程令牌 使用AtomicInteger 线程安全
public static final AtomicInteger threadToken = new AtomicInteger(1);
//线程数目
private int threadCount;
public ResourceTest(int threadCount) {
this.threadCount = threadCount;
}
public synchronized void sequentialThread(){
//获取当前线程名
int threadName= Integer.parseInt(Thread.currentThread().getName());
//判断线程名与令牌是否相等
if(threadToken.get()==threadName) {
System.out.println(threadName+"------启动");
//执行到最后将令牌归1
if(threadToken.get()==threadCount) {
threadToken.set(1);
}else {
//令牌递增
threadToken.incrementAndGet();
}
notifyAll();
}else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//线程类
public class ThreadSequential implements Runnable{
private ResourceTest r;
public ThreadSequential(ResourceTest r) {
this.r = r;
}
public void run() {
while(true) {
r.sequentialThread();
}
}
}
public class ThreadTest {
public static void main(String[] args) throws InterruptedException {
ResourceTest r = new ResourceTest(3);
Thread a = new Thread(new ThreadSequential(r));
a.setName("1");
Thread b = new Thread(new ThreadSequential(r));
b.setName("2");
Thread c = new Thread(new ThreadSequential(r));
c.setName("3");
a.start();
b.start();
c.start();
}
}
结果