子線程和 主線程 互換
阿新 • • 發佈:2017-06-25
void cep tac exception syn ack brush out num
package demo; /** * 子線程循環5次,主線程循環10次。依次交替。整個交替循環3次 * */ public class ThreadTest { public static void main(String[] args) { init(); } static void init(){ final Print p = new Print();//封裝了 循環的動作 new Thread(new Runnable(){ @Override public void run() { for(int i=0;i<3;i++){ p.subPrint(5);//循環5次} } }).start(); new Thread(new Runnable(){ @Override public void run() { for(int i=0;i<3;i++){ p.mainPrint(10);//循環10次 } } }).start(); } }
Print:
package demo; /** * 兩個方法之間互斥 (方法裏面完整執行完),用 Sflag實現 開關控制 兩個方法的切換 * */ public class Print { boolean Sflag = true;public synchronized void subPrint(int num){ while(!Sflag){//避免 偽喚醒 try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for(int i=1;i<=num;i++){ System.out.println(Thread.currentThread().getName()+":"+i); } Sflag = false; this.notifyAll();} public synchronized void mainPrint(int num){ while(Sflag){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for(int i=1;i<=num;i++){ System.out.println(Thread.currentThread().getName()+":"+i); } Sflag = true; this.notifyAll(); } }
子線程和 主線程 互換