1. 程式人生 > >子線程和 主線程 互換

子線程和 主線程 互換

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(); } }

  

子線程和 主線程 互換