日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

三线程

發布時間:2024/1/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三线程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


package hr.test;
//臨界區,用于控制打印線程的工作順序和互斥操作
class Mutex{
private int order=1; //記錄線程順序號
private int maxNum=0; //最大線程數

Mutex(int num){
this.maxNum=num;
}
//循環設置下一次要打印的順序號
public void setOrder(){
this.order=(++order)<=maxNum?order:1;
}
//得到順序號
public int getOrder(){
return this.order;
}
}
//打印工作
class PrintRunnable implements Runnable{

private Object[] cont=null; //打印內容
private int order=-1; //當前線程的打印順序
private Mutex mutex=null; //臨界區對象

PrintRunnable(Object[] c,int o,Mutex m){
this.cont=c;
this.order=o;
this.mutex=m;
}

public void run(){
try{
//循環打印內容
for(Object c:cont){
//互斥操作臨界區
synchronized(mutex){
//如果當前工作線程的順序號不等于臨界區的順序號,則工作線程等待阻塞,并放棄鎖
while(mutex.getOrder()!=this.order)
mutex.wait();
//打印內容
System.out.println(c);
//設置下一次允許打印的線程順序
mutex.setOrder();
//喚醒在臨界區等待的所有線程
mutex.notifyAll();
}
}
}catch(InterruptedException e){
e.printStackTrace();
}

}
}

//測試
public class Test {

public static void main(String[] args){
Integer[] number={1,2,3,4};
Character[] upperChar={'A','B','C','D'};
Character[] lowerChar={'a','b','c','d'};
Mutex mutex=new Mutex(3);
new Thread(new PrintRunnable(number,1,mutex)).start();
new Thread(new PrintRunnable(upperChar,2,mutex)).start();
new Thread(new PrintRunnable(lowerChar,3,mutex)).start();
}
}

?

轉載于:https://www.cnblogs.com/ouyangping/p/6517926.html

總結

以上是生活随笔為你收集整理的三线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。