编程语言:java停止线程

    作者:hongxiao2020更新于: 2020-04-09 22:21:11

    大神带你学编程,欢迎选课

      线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIXThread;或者由内核与用户进程,如Windows7的线程,进行混合调度。

      同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(callstack),自己的寄存器环境(registercontext),自己的线程本地存储(thread-localstorage)。

      stop()已经过时.

      停止线程:run()方法结束。

      开启多线程运行,通常代码都是循环结构。

      只要控制住循环,就可以让run()结束,也就结束了线程。

      classStopThreadimplementsRunnable{

      privatebooleanflag=true;

      @Override

      publicvoidrun(){

      while(flag){

      System.out.println(Thread.currentThread().getName()+"...run");

      }

      }

      publicvoidchangeFlag(){

      flag=false;

      }

      }

      publicclassStopThreadDemo{

      publicstaticvoidmain(String[]args){

      StopThreadst=newStopThread();

      Threadt1=newThread(st);

      Threadt2=newThread(st);

      t1.start();

      t2.start();

      intnum=0;

      while(true){

      if(num++==60){

      st.changeFlag();

      break;

      }

      System.out.println(Thread.currentThread().getName()+"......"+num);

      }

      }

      }

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

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

      Thread类中提供了该方法:interrupt();

      classStopThreadimplementsRunnable{

      privatebooleanflag=true;

      @Override

      publicsynchronizedvoidrun(){

      while(flag){

      try{

      wait();

      }catch(InterruptedExceptione){

      System.out.println(Thread.currentThread().getName()+"...Exception");

      flag=false;

      }

      System.out.println(Thread.currentThread().getName()+"...run");

      }

      }

      publicvoidchangeFlag(){

      flag=false;

      }

      }

      publicclassStopThreadDemo{

      publicstaticvoidmain(String[]args){

      StopThreadst=newStopThread();

      Threadt1=newThread(st);

      Threadt2=newThread(st);

      t1.start();

      t2.start();

      intnum=0;

      while(true){

      if(num++==60){

      //st.changeFlag();

      t1.interrupt();

      t2.interrupt();

      break;

      }

      System.out.println(Thread.currentThread().getName()+"......"+num);

      }

      System.out.println("over");

      }

      }

      在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

课课家教育

未登录

1