您好,登錄后才能下訂單哦!
本案例演示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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。