package com.xsz.demo;import java.util.concurrent.locks.condition;import java.util.concurrent.locks.lock;import java.util.concurrent.locks.reentrantlock;/** * Two threads alternately execute the line * @author cwqi */public class AdvanceMutiThread {public static Void main (String[] args) {final ThreadTest5 threadTest5 = new ThreadTest5 (); Final int count = 5;new thread (new runnable () {@ Overridepublic void run () {for (int i = 0; i < count; i++) {threadtest5.addmethod ();}}). Start (); New thread (new runnable () {@Overridepublic void run () {for (int i = 0; i < count; i++) {threadtest5.subtractmethod ();}}). Start ();}} Class threadtest5 {private lock lock = new reentrantlock ();p Rivate int cons = 0;int flag = 0; Condition con1 = lock.newcondition (); Condition con2 = lock.newcondition ();p Ublic void addmethod () { // Execute plus 1lock.lock ();try {while (flag % 2 != 0) con1.await (); System.out.println ("thread a: " + (++cons)); Flag++;con2.signal ();} catch (exception e) {e.printstacktrace ();} finally {lock.unlock ();}} Public void subtractmethod () { // perform minus 1lock.lock ();try {while (flag % 2 == 0) con2.await (); System.out.println ("thread b: " + (--cons)); Flag++;con1.signal ();} catch (exception e) {e.printstacktrace ();} finally {lock.unlock ();}}}
Multi-threaded alternating execution