java守护线程(后台线程)

摘要:
启用多线程运行。运行代码通常是循环结构。只要控制循环,就可以让run方法结束,即线程结束。那么线程将不会结束。当没有指定的方法将冻结的线程恢复到运行状态时,需要清除冻结的线程。强制线程返回到运行状态。

/*
1.让各个对象或类相互灵活交流
2.两个线程都冻结了,就不能唤醒了,因为根据代码要一个线程活着才能执行唤醒操作,就像玩木游戏
3.中断状态就是冻结状态
4.当主线程退出的时候,里面的两个线程都处于冻结状态,这样就卡住了
5.try catch   有异常,catch就自动帮忙处理,程序继续运行
6.让wait 中断  就会发生异常,就会被处理
*/


/*
stop方法已经过时。

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

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


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

当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。
强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。

Thread类提供该方法 interrupt();



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




class  StopThreadDemo
{
    public static void main(String[] args)
    {
        StopThread st = new StopThread();
        
        Thread t1 = new Thread(st);
        Thread t2 = new Thread(st);


        t1.setDaemon(true);                /*守护线程,也叫后台线程,主线程一挂,后台线程也跟着挂*/
        t2.setDaemon(true);
        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);
        }
        System.out.println("over");
    }
}

免责声明:文章转载自《java守护线程(后台线程)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(05)odoo数据库和业务操作SpringBoot+Redis集成简单测试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IOS多线程--回调主线程

回调主线程 (1)NSThread 1.performSelectorOnMainThread调用主线程的方法、 [self performSelectorOnMainThread:@selector(finish) withObject:self waitUntilDone:NO]; 2.回调其她子线程也是可以的,但是不用 self performSel...

十、future其他成员函数、shared_future、atomic(原子操作)

一、 1 int mythread(){ 2 cout<<"thread"<<endl; 3 std::chrono::milliseconds dura(5000);//5秒钟 4 std::this_thread::sleep_for(dura);//休息5秒钟 5 return 5;...

异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)

在一个项目中,为了系统执行效率更快,把一个经常用到的数据库表通过dataset放到Application中,发现在异步实现中每一次都会出现HttpContext.Current为null的异常,后来在网上查了好多资料,发现问这个问题的人多,回答的少,回答的也多数都是:引用System.Web,不要用HttpContext.Current.Applicati...

【转】 .NET中STAThread和MTAThread

ref:http://blog.csdn.net/dyllove98/article/details/9735955 1 COM中的公寓 本文讨论进程内COM组件。以一个示例直观演示STAThread和MTAThread的作用和区别。 1.1 基本规则 公寓是COM组件的运行环境,日常生活中公寓是用来住人的,COM中的公寓是用来住COM组件的对象的,每个...

从源码中学习设计模式系列——单例模式序/反序列化以及反射攻击的问题(二)

一、前言 这篇文章是学习单例模式的第二篇,之前的文章一下子就给出来看起来很高大上的实现方法,但是这种模式还是存在漏洞的,具体有什么问题,大家可以停顿一会儿,思考一下。好了,不卖关子了,下面我们来看看每种单例模式存在的问题以及解决办法。 二、每种Singleton 模式的演进 模式一 public classLazySingleton {...

QT5线程关闭

QT5线程关闭 QThread析构函数的说明:请注意,删除一个QThread对象不会停止它管理的线程的执行。 删除正在运行的QThread(即isFinished()返回false)将导致程序崩溃。 在删除QThread之前等待finished()信号。 从Qt4.8起,可以释放运行刚刚结束的线程对象,通过连接finished()信号到QObject::d...