哪种情况可以终止线程

哪些情况可以终止当前线程的运行?

A、抛出一个例外时。
B、当该线程调用sleep()方法时。
C、当创建一个新线程时。
D、当一个优先级高的线程进入就绪状态时

 

A!pthread_clean_pop抛出一个例外,线程终止!也可以通过其他线程调用pthread_cancel()函数来终止另一个线程,当前选择选A

D并不是终止,而是抢占,进程是资源分配的最基本单位,同一个进程创建的不同线程共享这些资源。所以这些线程能使用的资源是有限的。当某一个线程优先级比较高时,它就会抢占其他线程的资源,导致其他线程没有资源可用,会造成阻塞,直到那个优先级高地线程使用完。一般创建线程的时候都会有个属性绑定,在那里边就可以设置线程的响应速度。我这样讲,你明白了吗?所以D根本根本不能教终止,只能叫挂起当前线程!

 

 

终止线程执行的两种方法

一旦一个线程处于Runnable状态,它就会连续地执行,直到run()方法结束。Thread早期版本中有一个stop()方法,可以随时终止线程的执行。由于stop()方法在JDK的较新版本中已建议不再使用。因此,要使用一些技巧来实现这一手段。就我目前接触到的来看,要分两种情况:

 

1.对于继承Thread类构造线程的情况

public class ClassName extends Thread
{
    private boolean running=false;
    //该类的域和方法
    //一般包含如下start()方法用于启动线程
    public void start()
    {
        running=true;
        super.start();
    }
    //一般包含如下halt()方法用于终止线程
    public void halt()
    {
        running=false;
    }
    //在run()方法中使用类似于下例的while循环
    public void run()
    {
        while(running)
        {
            /*线程要执行的代码*/
        }
    }

}

 

2.对于实现Runnable接口构造线程的情况

注意,下面的stop()和start()方法不是自动被调用的,它们仅提供一种很方便的手段去终止或者启动线程。

 

 

public class ClassName extends Thread
{
    private Thread threadName=null;
    //该类的域和方法
    //一般包含如下start()方法用于启动线程
    public void start()
    {
        if(threadName==null)
        {
            threadName=new Thread(this);
            threadName.start();
        }
    }
    //一般包含如下stop()方法用于终止线程
    public void stop()
    {
        threadName=null;
    }
    //在run()方法中使用类似于下例的while循环
    public void run()
    {
        Thread currentThread=Thread.currentThread();
        while(threadName==currentThread)
        {
            /*有适当的代码调用threadName.sleep(sleeptime)或者threadName.yied()*/
        }
    }

}

 

Notice:

如果while循环中还使用了循环,此时调用自定义的halt()或者stop()方法可能不能立即终止线程,而是会运行到while循环中的循环结束为止。

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值