java学习笔记6

线程生命周期的控制

任何事务都有一个生命周期,线程也不例外。那么在一个程序中,怎样控制一个

线程的生命并让它更有效地工作呢?要想控制线程的生命,先得了解线程产生和消亡

的整个过程。线程的声明周期如下所示

java学习笔记6_第1张图片

线程的生命周期

控制线程生命周期的方法有很多种,如:suspend 方法、resume 方法和 stop 方法。但这三个方法都不推荐使用,其中,不推荐使用 suspend 和 resume 的原因是:

(1)、会导致死锁的发生。

(2)、它允许一个线程(甲)通过直接控制另外一个线程(乙)的代码来直接控制

那个线程(乙) 。

虽然 stop 能够避免死锁的发生,但是也有其它的不足:如果一个线程正在操作共

享数据段,操作过程没有完成就被“stop”了的话,将会导致数据的不完整性。

那么怎么控制线程的声明周期呢?

通过控制 run 方法中循环条件的方式来结束一个线程的方法是推荐使用的,这也是实际用的最多的方法。

代码实例:

public class TestThread implements Runnable{
 
  private boolean bFlag = true ;
  public void  stopMe()
        {  bFlag = false ; }
       publicvoid run() {
         while (bFlag)
         {
               System.out.println(
                             Thread.currentThread().getName()
                              +"在运行!");
          }
       }
}
public class Threadlife {
       publicstatic void main(String[] args)
       {
        TestThread t = new TestThread();
        new Thread(t).start();
        for( int i = 0; i < 10 ; i++ )
          {
               if( i == 5)
                      t.stopMe();
               System.out.println("main 线程在运行!");
          }
       }
}


多线程中重要的知识点:

1、线程(thread)是指程序的运行流程。 “多线程”的机制可以同时运行多个程序块,使程序运行的效率更高,也解决了传统程序设计语言所无法解决的问题。

2、如果在类里要激活线程,必须先做好下面两项准备:

(1) 、此类必须是扩展自 Thread 类,使自己成为它的子类。

(2) 、线程的处理必须编写在 run()方法内。

3、 run()方法是定义在 Thread 类里的一个方法,因此把线程的程序代码编写在 run()方法内,所做的就是覆盖的操作。

4、 Runnable 接口里声明了抽象的 run()方法,因此必须在实现Runnable 接口的类里明确定义 run()方法。

5、每一个线程,在其创建和消亡之前,均会处于下列五种状态之一:创建、就绪、运行、阻塞、终止。

6、暂停状态的线程可由下列的情况所产生:

(1)该线程调用对象的 wait()时。

(2)该线程本身调用 sleep()时。

(3)该线程和另一个线程 join()在一起时。

7、被冻结因素消失的原因有:

(1) 如果线程是由调用对象的 wait()方法所冻结, 则该对象的 notify()方法被调用

时可解除冻结。

(2)线程进入休眠(sleep)状态,但指定的休眠时间到了。

8、当线程的 run()方法运行结束,或是由线程调用它的 stop()方法时,则线程进入消亡状态。

9、 Thread 类里的 sleep()方法可用来控制线程的休眠状态,休眠的时间要视 sleep()里的参数而定。

10、要强制某一线程运行,可用 join()方法。

11、join()方法会抛出InterruptedException 的异常,所以编写时必须把 join()方法编写在 try-catch 块内。

12、当多个线程对象操纵同一共享资源时,要使用 synchronized 关键字来进行资源的同步处理。

你可能感兴趣的:(java学习笔记6)