Demo16_停止线程_定义标记

package test07;

public class Demo16_停止线程_定义标记 {
public static void main(String[] args){
demo d = new demo();
Thread t5 = new Thread(d);
// 线程名称更改Thread t5 = new Thread(d,”线程ε=ε=ε=(#>д<)ノ”);
Thread t6 = new Thread(d);
t5.start();
t6.start();
int x=0 ;
while(true)
{
if(++x == 50)//条件满足
{
d.ch();//改变线程任务的标记,让其他线程也结束
break ;//跳出循环主线程结束
}
System.out.println(“main…….”+x);
System.out.println(Thread.currentThread().toString());
// Thread[main,5,main]
// 线程名称、优先级和线程组
/*线程的优先级:用数字标识1-10
* 其中默认优先级为5,最明显的三个优先级是1,5,10
*
* 线程组:ThreadGroup 可以通过thread的构造函数明确新线程对象所属的线程组
* 线程组的好处 可以对多个同组线程,进行统一的操作
* 默认都属于main线程组
* */
}System.out.println(“程序停止”);
}
}
/*线程如何停止呢?
*stop已经过时了,看其描述发现,有其他的解决方案
*线程结束:就是让线程任务代码执行完,run方法结束
*
* 怎样结束run方法呢
*run方法通常有循环,只要控制住循环就可以了
*
*注意 :万一线程在任务中处于冻结状态,那么就不能判断标记
*解决方法:如果目标线程等待了很长时间,则应该使用interrupt方法中断该等待
*所谓的中断,并不是停止线程 而是将线程的冻结状态清除,让线程恢复到运行状态(让线程重新具备CPU的执行资格)
*因为其是强制性的,所以时常发生异常,可以通过catch中捕获异常,在异常处理中,改变标记让循环结束,让run方法结束
*
*守护线程 :后台线程 (我们一般创建的都是前台线程)setDaemon
*前台线程运行时都是一样的,获取CPU的执行权
*只有结束时有所不同
*前台线程一般通过run方法结束,还有另一种情况
*当进程中所有的前台线程都结束了,这是无论后台线程处于什么样的状态,都会结束,从而进程结束
*进程结束依赖的是前台线程
*/
//演示停止线程
class demo implements Runnable
{
private boolean flag = true;

public void run()
{
    while(flag)
    {
        System.out.println(Thread.currentThread().getName()+"......");
    }
}
//对标记的修改方法
public void ch()
{
    flag = false ;
}

}

猜你喜欢

转载自blog.csdn.net/mingxu_W/article/details/81807409
今日推荐