本案例演示3个线程轮流打印输出数字字母;代码如下
package thread;
public class ThreadTest {
public static void main(String[] args) {
Print print = new Print();
new Thread(()->{
print.printNum();
}).start();
new Thread(()->{
print.printZimu();
}).start();
new Thread(()->{
print.printZimuLittle();
}).start();
}
}
package thread;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Print {
final Lock lock = new ReentrantLock();
final Condition num = lock.newCondition();
final Condition zimu = lock.newCondition();
final Condition zimuLittle = lock.newCondition();
public void printNum(){
lock.lock();
try {
for (int i=1;i<53;i++){
System.out.print(i);
if (i%2==0){
zimu.signal();
num.await();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void printZimu(){
lock.lock();
try {
for (int i=0;i<26;i++){
System.out.print((char)(i+'A'));
zimuLittle.signal();
zimu.await();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void printZimuLittle(){
lock.lock();
try {
for (int i=0;i<26;i++){
System.out.print((char)(i+'a'));
num.signal();
zimuLittle.await();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
最终输出结果为12aA34bB56cC78dD910eE1112fF1314gG1516hH1718iI1920jJ2122kK2324lL2526mM2728nN2930oO3132pP3334qQ3536rR3738sS3940tT4142uU4344vV4546wW4748xX4950yY5152zZ
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。