zoukankan      html  css  js  c++  java
  • 停止线程方式

    停止线程方法_stop方法(已过时)

    停止线程方法_定义标记(run方法结束)

    怎么控制线程的任务结束:

      线程任务中都会有循环结构,只要控制住循环就可以结束任务。控制循环通常就用定义标记来完成。

     1 class StopThread implements Runnable{
     2     private boolean flag = true;
     3     public void run(){
     4         while(flag){
     5             System.out.println(Thread.currentThread().getName()+".....");
     6         }
     7     }
     8     public void setFlag(){
     9         flag = false;
    10     }
    11 }
    12 class StopThreadDemo {
    13     public static void main(String[] args) {
    14         StopThread st = new StopThread();
    15 
    16         Thread t1 = new Thread(st);
    17         Thread t2 = new Thread(st);
    18 
    19         t1.start(); 
           t2.start();
    22 23 24 int num = 1; 25 for(;;){ 26 if(++num==50){ 27 st.setFlag(); 28 break; 29 } 30 System.out.println("main...."+num); 31 } 32 System.out.println("over"); 33 } 34 }

    但是如果线程处于了冻结状态,无法读取标记。如何结束:

        可以使用Thread类中的interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu的执行资格。

        因为强制动作会发生了InterruptedException,记得要处理,在catch中处理的时候 将标记改为false就可以结束循环,线程也就结束了

     1 class StopThread implements Runnable{
     2     private boolean flag = true;
     3     public synchronized void run(){
     4         while(flag){
     5             try{
     6                 wait();//t0 t1    使用这个方法是强制性唤醒的会发生异常,就执行catch里的代码,然后将标记改为false
     7             }catch (InterruptedException e){
     8                 System.out.println(Thread.currentThread().getName()+"....."+e);
     9                 flag = false;
    10             }
    11             
    12             System.out.println(Thread.currentThread().getName()+"......++++");
    13         }
    14     }
    15     public void setFlag(){
    16         flag = false;
    17     }
    18 }
    19 class StopThreadDemo {
    20     public static void main(String[] args) {
    21         StopThread st = new StopThread();
    22 
    23         Thread t1 = new Thread(st);
    24         Thread t2 = new Thread(st);
    25 
    26         t1.start();
    27         t2.start();
    29 
    30 
    31         int num = 1;
    32         for(;;){
    33             if(++num==50){
    34                 t1.interrupt();
    35                 t2.interrupt();
    36                 break;
    37             }
    38             System.out.println("main...."+num);
    39         }
    40         System.out.println("over");
    41     }
    42 }
  • 相关阅读:
    用DD-WRT自建计费WiFi热点
    docker安全最佳实践概述
    2014年8月25日,收藏家和杀手——面向对象的C++和C(一)
    Maven
    做QA的日子——iOS測试入门(四)
    小贝_mysql select连接查询
    FFmpeg源码简单分析:结构体成员管理系统-AVOption
    Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享
    Redis主从配置及通过Keepalived实现Redis自动切换高可用
    CentOS 安装jdk1.7 32位
  • 原文地址:https://www.cnblogs.com/LO-ME/p/3574608.html
Copyright © 2011-2022 走看看