package StopThread;
public class StopThread implements Runnable{
private boolean flag = true;
public void run() {
// TODO Auto-generated method stub
while(flag){
System.out.println(Thread.currentThread().getName()+"----run");
}
}
public void changeFlag(){
flag = false;
}
}
package StopThread;
public class StopThreadDemo {
/**
* stop 方法已经过时,
*
* 停止方法:run方法结束
* 开启多线程运行,运行代码通常是循环结构。
*
* 只要控制住循环 ,就可以让run方法结束,即线程结束。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StopThread stopThread = new StopThread();
Thread t1 = new Thread(stopThread);
Thread t2 = new Thread(stopThread);
t1.start();
t2.start();
int num = 0;
while(true){
if (num++ == 60){
stopThread.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"....."+num);
}
}
}
=================== 特殊情况 =====================
package StopThread;
public class StopThread implements Runnable{
private boolean flag = true;
public synchronized void run() {
// TODO Auto-generated method stub
while(flag){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println(Thread.currentThread().getName()+"----Exception ");
flag = false;
}
System.out.println(Thread.currentThread().getName()+"----run");
}
}
// public void changeFlag(){
// flag = false;
// }
}
package StopThread;
public class StopThreadDemo {
/**
* stop 方法已经过时,
*
* 停止方法:run方法结束
* 开启多线程运行,运行代码通常是循环结构。
*
* 只要控制住循环 ,就可以让run方法结束,即线程结束。
* =============================================================
*
* * 特殊情况,当线程处于冻结状态就不会读取标记,线程就不会结束。
* 当没有指定的方式让冻结线程结束时,需要对冻结的线程进行清除。
* 强制让线程恢复到运行状态中,
* 就可以操作标记,让线程结束。
* Thread类中提供了: interrupt();
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StopThread stopThread = new StopThread();
Thread t1 = new Thread(stopThread);
Thread t2 = new Thread(stopThread);
t1.start();
t2.start();
int num = 0;
while(true){
if (num++ == 60){
t1.interrupt();
t2.interrupt();
// stopThread.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"....."+num);
}
}
}
===================
守护线程 ====================
package StopThread;
public class StopThread implements Runnable{
private boolean flag = true;
public synchronized void run() {
// TODO Auto-generated method stub
while(flag){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println(Thread.currentThread().getName()+"----Exception ");
flag = false;
}
System.out.println(Thread.currentThread().getName()+"----run");
}
}
// public void changeFlag(){
// flag = false;
// }
}
package StopThread;
public class StopThreadDemo {
/**
* stop 方法已经过时,
*
* 停止方法:run方法结束
* 开启多线程运行,运行代码通常是循环结构。
*
* 只要控制住循环 ,就可以让run方法结束,即线程结束。
* =============================================================
*
* * 特殊情况,当线程处于冻结状态就不会读取标记,线程就不会结束。
* 当没有指定的方式让冻结线程结束时,需要对冻结的线程进行清除。
* 强制让线程恢复到运行状态中,
* 就可以操作标记,让线程结束。
* Thread类中提供了: interrupt();
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StopThread stopThread = new StopThread();
Thread t1 = new Thread(stopThread);
Thread t2 = new Thread(stopThread);
/**
* 守护线程
* 1. 线程启动前设为true
* 2. 当前台线程(主线程)结束了,守护线程就结束了,JVM虚拟机退出。
*/
t1.setDaemon(true);
t2.setDaemon(true);
t1.start();
t2.start();
int num = 0;
while(true){
if (num++ == 60){
// t1.interrupt();
// t2.interrupt();
// stopThread.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"....."+num);
}
}
}