package com.gxx.record.gtja; import java.util.ArrayList; import java.util.List; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 打印对象 * 逻辑:多线程按顺序打印1,2,3...,n,n+1,n+2,...,2n,2n+1,2n+2... * @author Gxx */ public class PrintObject { /** * 锁 */ private Lock lock = new ReentrantLock(); /** * 条件 */ private List conditionList = new ArrayList(); /** * 打印索引,从1,2,3...n,1,2,3... */ private int index = 1; /** * 线程数 */ private int n; /** * 轮次 */ private int k = 0; /** * 构造方法 * @param num */ public PrintObject(int num) { for(int i=0;i n) { index = 1; } Thread.sleep(100); conditionList.get(index - 1).signal();//唤醒 } catch(Exception e) { e.printStackTrace(); } finally { lock.unlock();//释放锁 } } }