package day12;
/*
stop方法已经过时。
如何停止线程?
只有一种,run方法结束。
开启多线程运行,运行代码通常是循环结构。
只要控制住循环,就可以让run方法结束,也就是线程结束。
特殊情况:
当线程处于了冻结状态。
就不会读取到标记。那么线程就不会结束。
当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。
强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。
Thread类提供该方法 interrupt();
*/
public class ThreadDemo7 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
menth_2();
}
public static void menth_2()
{
ThreadDemo2 td=new ThreadDemo2();
Thread t1=new Thread(td);
Thread t2=new Thread(td);
//s守护线程 主线程是前台线程 当前台线程结束的时候后台线程也结束
t1.setDaemon(true);
t2.setDaemon(true);
t1.start();
t2.start();
int num=0;
while(true)
{
num++;
if(num==100)
{
break;
}
System.out.println(Thread.currentThread().getName()+" main "+num);
}
System.out.println("ovwer");
}
public static void menth_1()
{
ThreadDemo td=new ThreadDemo();
Thread t1=new Thread(td);
Thread t2=new Thread(td);
t1.start();
t2.start();
int num=0;
while(true)
{
num++;
if(num==100)
{
t1.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+" main "+num);
}
System.out.println("ovwer");
}
}
//2
class ThreadDemo2 implements Runnable
{
private boolean flag=true;
public void run()
{
while(flag)
{
System.out.println(Thread.currentThread().getName()+" run");
}
}
public void changeflag()
{
flag=false;
}
}
//1
class ThreadDemo implements Runnable
{
private boolean flag=true;
public synchronized void run()
{
while(flag)
{
try {
this.wait();
//当线程进入到等待状态的时候 就没有办法结束线程 这个时候i就要用到 强制结束线程 的方法 interrupt 强制结束线程 在catch中处理异常
} catch (InterruptedException e) {
// TODO: handle exception
System.out.println(Thread.currentThread().getName()+" Exception");
flag=false;
}
System.out.println(Thread.currentThread().getName()+" run");
}
}
public void changeflag()
{
flag=false;
}
}
java停止线程 interrupt 和守护线程setDaemon
最新推荐文章于 2023-04-06 10:08:15 发布