黑马程序员技术交流社区

标题: 控制线程 [打印本页]

作者: ℃葫芦    时间: 2015-8-13 22:47
标题: 控制线程
停止线程:
1,stop方法。

2,run方法结束。

怎么控制线程的任务结束呢?
任务中都会有循环结构,只要控制住循环就可以结束任务。

控制循环通常就用定义标记来完成。

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

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

当时强制动作会发生了InterruptedException,记得要处理

  1. class StopThread implements Runnable
  2. {
  3.         private boolean flag = true;
  4.         public synchronized void run()
  5.         {
  6.                 while(flag)
  7.                 {
  8.                         try
  9.                         {
  10.                                 wait();//t0 t1
  11.                         }
  12.                         catch (InterruptedException e)
  13.                         {
  14.                                 System.out.println(Thread.currentThread().getName()+"....."+e);
  15.                                 flag = false;
  16.                         }
  17.                        
  18.                         System.out.println(Thread.currentThread().getName()+"......++++");
  19.                 }
  20.         }
  21.         public void setFlag()
  22.         {
  23.                 flag = false;
  24.         }
  25. }



  26. class StopThreadDemo
  27. {
  28.         public static void main(String[] args)
  29.         {
  30.                 StopThread st = new StopThread();

  31.                 Thread t1 = new Thread(st);
  32.                 Thread t2 = new Thread(st);

  33.                 t1.start();
  34.                 t2.setDaemon(true);
  35.                 t2.start();


  36.                 int num = 1;
  37.                 for(;;)
  38.                 {
  39.                         if(++num==50)
  40.                         {
  41. //                                st.setFlag();
  42.                                 t1.interrupt();
  43. //                                t2.interrupt();
  44.                                 break;
  45.                         }
  46.                         System.out.println("main...."+num);
  47.                 }

  48.                 System.out.println("over");
  49.         }
  50. }
复制代码









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2