您的位置:首页 > 其它

多线程停止/守护线程

2018-04-03 14:51 162 查看
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
4000
= 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);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐