148_多线程(停止线程)

/*
stop方法已经过时。

如何停止线程?
只有一种,run方法结束。
开启多线程运行,运行代码通常是循环结构。

只要控制循环,就可以让run方法结束,也就是线程结束。
*/

class StopThreadDemo implements Runnable{
	private boolean flag = true;
	public void run(){
		while(flag){
			System.out.println(Thread.currentThread().getName()+"...run");
		}
	}
	public void changeFlag(){
		flag = false;
	}
}

class StopThread{
	public static void main(String[] args){
		StopThreadDemo st = new StopThreadDemo();
		
		Thread t1 = new Thread(st);
		Thread t2 = new Thread(st);
		
		t1.start();
		t2.start();
		
		int num = 0;
		
		while(true){
			if(num++ == 60){
				st.changeFlag();
				break;
			}
			System.out.println(Thread.currentThread().getName()+"..."+num);
		}
	}
}

/*
特殊情况,当线程处于了冻结状态,就不会读取到标记,
线程就不会结束。
*/

class StopThreadDemo implements Runnable{
	private boolean flag = true;
	public synchronized void run(){
		while(flag){
			try{
				wait();
			}
			catch(InterruptedException e){
				System.out.println(Thread.currentThread().getName()+"...Exception");
			}
			System.out.println(Thread.currentThread().getName()+"...run");
		}
	}
	public void changeFlag(){
		flag = false;
	}
}

class StopThread{
	public static void main(String[] args){
		StopThreadDemo st = new StopThreadDemo();
		
		Thread t1 = new Thread(st);
		Thread t2 = new Thread(st);
		
		t1.start();
		t2.start();
		
		int num = 0;
		
		while(true){
			if(num++ == 60){
				st.changeFlag();
				break;
			}
			System.out.println(Thread.currentThread().getName()+"..."+num);
		}
	}
}


/*
特殊情况,当线程处于了冻结状态,就不会读取到标记,
线程就不会结束。
当没有指定的方式让冻结的线程恢复到运行状态时,这时需要
对冻结进行清除。强制让线程恢复到运行状态中来。这样就可以操作
标记让线程结束。
Thread类提供该方法interru();
*/

class StopThreadDemo implements Runnable{
	private boolean flag = true;
	public synchronized void run(){
		while(flag){
			try{
				wait();
			}
			catch(InterruptedException e){
				System.out.println(Thread.currentThread().getName()+"...Exception");
				flag = false;
			}
			System.out.println(Thread.currentThread().getName()+"...run");
		}
	}
	public void changeFlag(){
		flag = false;
	}
}

class StopThread{
	public static void main(String[] args){
		StopThreadDemo st = new StopThreadDemo();
		
		Thread t1 = new Thread(st);
		Thread t2 = new Thread(st);
		
		t1.start();
		t2.start();
		
		int num = 0;
		
		while(true){
			if(num++ == 60){
				//st.changeFlag();
				t1.interrupt();
				t2.interrupt();
				break;
			}
			System.out.println(Thread.currentThread().getName()+"..."+num);
		}
	}
}

猜你喜欢

转载自317324406.iteye.com/blog/2251816
今日推荐