多线程循环输出
import java. util. concurrent. locks. Condition ;
import java. util. concurrent. locks. ReentrantLock ;
public class Main {
ReentrantLock lock = new ReentrantLock ( ) ;
Condition c1 = lock. newCondition ( ) ;
Condition c2 = lock. newCondition ( ) ;
Condition c3 = lock. newCondition ( ) ;
int num = 1 ;
public static void main ( String [ ] args) {
Main main = new Main ( ) ;
new Thread ( ( ) -> {
for ( int i = 0 ; i < 10 ; i++ ) {
main. printA ( ) ;
}
} ) . start ( ) ;
new Thread ( ( ) -> {
for ( int i = 0 ; i < 10 ; i++ ) {
main. printB ( ) ;
}
} ) . start ( ) ;
new Thread ( ( ) -> {
for ( int i = 0 ; i < 10 ; i++ ) {
main. printC ( ) ;
}
} ) . start ( ) ;
}
public void printA ( ) {
lock. lock ( ) ;
try {
while ( num != 1 ) {
c1. await ( ) ;
}
System . out. print ( "A" ) ;
num = 2 ;
c2. signal ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
} finally {
lock. unlock ( ) ;
}
}
public void printB ( ) {
lock. lock ( ) ;
try {
while ( num != 2 ) {
c2. await ( ) ;
}
System . out. print ( "B" ) ;
num = 3 ;
c3. signal ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
} finally {
lock. unlock ( ) ;
}
}
public void printC ( ) {
lock. lock ( ) ;
try {
while ( num != 3 ) {
c3. await ( ) ;
}
System . out. println ( "C" ) ;
num = 1 ;
c1. signal ( ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
} finally {
lock. unlock ( ) ;
}
}
}