1. 程式人生 > >java多執行緒等待強制喚醒——interrupt

java多執行緒等待強制喚醒——interrupt

/*
停止執行緒:
1,stop方法。

2,run方法結束。

怎麼控制執行緒的任務結束呢?
任務中都會有迴圈結構,只要控制住迴圈就可以結束任務。

控制迴圈通常就用定義標記來完成。

但是如果執行緒處於了凍結狀態,無法讀取標記。如何結束呢?

可以使用interrupt()方法將執行緒從凍結狀態強制恢復到執行狀態中來,讓執行緒具備cpu的執行資格。 

當時強制動作會發生了InterruptedException,記得要處理


*/
class StopThread implements Runnable
{
	private boolean flag = true;
	public synchronized void run()
	{
		while(flag)
		{
			try
			{
				wait();//t0 t1
			}
			catch (InterruptedException e)
			{
				System.out.println(Thread.currentThread().getName()+"....."+e);
				flag = false;
			}
			
			System.out.println(Thread.currentThread().getName()+"......++++");
		}
	}
	public void setFlag()
	{
		flag = false;
	}
}



class StopThreadDemo 
{
	public static void main(String[] args) 
	{
		StopThread st = new StopThread();

		Thread t1 = new Thread(st);
		Thread t2 = new Thread(st);

		t1.start();
		t2.setDaemon(true);
		t2.start();


		int num = 1;
		for(;;)
		{
			if(++num==50)
			{
//				st.setFlag();
				t1.interrupt();
//				t2.interrupt();
				break;
			}
			System.out.println("main...."+num);
		}

		System.out.println("over");
	}
}