public classOddEven {intlen;int[] num;int idx = 0;final Boolean lock = false;
ReentrantLock rlock= newReentrantLock();public OddEven(intlen) {this.len =len;
num= new int[len];for (int i = 0; i < len; i++) {
num[i]=i;
}
idx= 0;
}class Odd implementsRunnable {
@Overridepublic voidrun() {while(idx > 1 << 1) != num[idx]){System.out.print(num[idx]);System.out.println("--Odd");//++idx;//}//}
rlock.lock();if (idx < len && (num[idx] >> 1 << 1) !=num[idx]){
System.out.print(num[idx]);
System.out.println("--Odd");++idx;
}
rlock.unlock();
}
}
}class Even implementsRunnable {
@Overridepublic voidrun() {while(idx > 1 << 1) == num[idx]){//System.out.print(num[idx]);//System.out.println("--Even");//++idx;//}//}
rlock.lock();if (idx < len && (num[idx] >> 1 << 1) ==num[idx]){
System.out.print(num[idx]);
System.out.println("--Even");++idx;
}
rlock.unlock();
}
}
}public void execute() {long begin =System.currentTimeMillis();
Thread odd= new Thread(newOdd());
Thread even= new Thread(newEven());
odd.start();
even.start();try{
odd.join();
even.join();
}catch(InterruptedException e) {
e.printStackTrace();
System.out.println("被打断");
}long end =System.currentTimeMillis();
System.out.println("\ntotal time: " + (end -begin));
}public static voidmain(String[] args) {
OddEven oe= new OddEven(100000);
oe.execute();
}
}