多线程(二)线程控制

一.线程的操作

  构造方法:Thread(Runnable target)  创建新的线程对象

         Thread(Runnable target,String name)  创建新的线程对象,并指定名字

  成员方法:  static Thread currentThread()  返回当前线程对象

         long getId()  返回当前线程ID

       String getName()  返回当前线程名称

       void setName()  设置当前线程名称

       boolean isAlive()  判断当前线程是否处于活动状态

 

  重要方法:

     1.sleep 线程休眠

      如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,可以调用Thread类的静态方法sleep()来实现,sleep()有2种重载形式

      static void sleep(long millis)  让当前线程暂停指定的毫秒数,在继续执行,比较常用

      static void sleep(long millis,int nanos)  让当前线程暂停指定毫秒数加纳秒数,在继续执行

      * 让当前线程进入休眠状态,让出当次执行的CPU时间,当时该线程不丢失任何监视器的所属权

     2.join 等待线程终止

      join()方法的作用是让一个线程等待另一个线程执行完成,它有3种重载形式

      join()  等待该线程终止

      join(long millis)  等待该线程终止的时间最长为指定毫秒数

      join(long millis,int nanos)  等待该线程终止的时间最长为指定毫秒数加纳秒数,不常用

     3.interrupt() 线程中断

      interrupt()方法只是给线程做了一个中断标记,并没有真正地中断线程,遇到sleep(),join(),wait()方法标记会被清掉,并抛出InterruptException异常,线程会继续执行

      interrupt()  中断该线程

      Thread.interrupted()  判断当前线程是否被终止

      * 但通常会使用自定义标记来中断线程,满足条件后自己终止

    4.改变线程优先级

      每个线程执行都有一定的优先级,优先级高的线程获得较多的执行机会,优先级低的获得较少的执行机会。

      setPriority(int n)  设置优先级,n的范围为1-10之间,一般使用Thread类的3个静态常量,提高可移植性:

              MAX_PRIORITY:值为10

              MIN_PRIORITY:值为1

              NORM_PRIORITY:值为5

      getPriority()  获得线程优先级

    5.守护线程

      守护线程是在后台运行的,是为其他线程提供服务的,当所有用户线程都死亡,守护线程会自动死亡,当虚拟机只剩下守护线程时,虚拟机会自动退出,JVM的垃圾回收线程就是典型的守护线程。

      setDaemon(boolean on)  将线程标记为守护线程或用户线程

      isDaemon()  判断线程是否为守护线程

    3. yield() 线程让步 

      Thread类的静态方法,和sleep()方法有点相似,只是它让当前线程暂停,但不会阻塞该线程,只是让该线程转入就绪状态,继续抢时间执行。暂停之后,只有优先级与该线程相同或优先级比该线程更高的处于就绪状态的线程才会获得执行的机会。 

 

posted @ 2014-11-27 01:25  zhuxian300c  阅读(134)  评论(0编辑  收藏  举报