`
在水伊方
  • 浏览: 107263 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Java停止线程

 
阅读更多

1、run方法正常结束

public class StopThreadDemo {
	public static void main(String[] args) {
		PrintThread pt = new PrintThread();
		pt.start();
	}
}

class PrintThread extends Thread {
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("print : " + i);
		}
	}
}

 

2、可以在run方法中设置标记让线程正常结束

public class StopThreadDemo {
	public static void main(String[] args) {
		PrintThread pt = new PrintThread();
		pt.start();
	}
}

class PrintThread extends Thread {
	int i = 0;
	boolean isStop = false;
	
	public void run() {
		while(!isStop) {
			if ((i++) == 10) {
				isStop = true;
			}
			
			System.out.println("print : " + i);
		}
	}
}

 

3、当线程处于冻结状态,没有指定的方式恢复到运行状态时,这时需要对冻结状态进行清除 强制让线程恢复到运行状态中来,这样就可以操作标记,让线程结束 Thread类中提供了该方法  interrupt()方法

public 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.start();

		int num = 0;
		while (true) {
			if (num++ == 60) {
				// st.changeFlag();
				/*
				 * interrupt方法只作用于那些因为执行了sleep、wait、join方法而休眠的线程,使他们不再休眠
				 */
				t1.interrupt();
				t2.interrupt();
				break;
			}

			System.out
					.println(Thread.currentThread().getName() + "....." + num);
		}

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

class StopThread implements Runnable {
	private boolean flag = true;

	@Override
	public synchronized void run() {
		while (flag) {
			try {
				wait();
			} catch (InterruptedException e) { // 可以在异常代码块中处理让线程正常退出或强制线程退出(return)
				System.out.println(Thread.currentThread().getName()
						+ ".....Exception.....");
				flag = false;
			}

			System.out.println(Thread.currentThread().getName()
					+ ".....run.....");
		}
	}

	public void changeFlag() {
		flag = false;
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics