多线程---API部分

1. 实现多线程的方式:A. 继承Thread类   B. 实现Runnable接口 

2. currentThread() : 可获取当前线程的基本信息

3. isAlive() : 测试线程是否处于活动状态(线程启动尚未终止,处于正在运行或准备运行的状态)

4. sleep() : 在指定的时间内让当前正在执行的线程休眠(不释放锁)

5. wait() : 让当前线程暂停,并释放锁,等待notify唤醒

6. thread.getId() : 获取线程的唯一标识

7. 线程是否为停止状态

    a. this.interrupted() 测试当前线程是否已中断,该方法执行后会清除状态标志

    b. this.isInterrupted() 测试当前线程是否已中断,该方法执行后不清除状态标志

8. 停止线程:

    a. run() 执行完成后线程终止

    b. stop()  作废的方法,不推荐。暴力停止:强制停止线程可能会使一些清理工作得不到完成,还可能对锁定的对象进行解锁,导致数据不同步等问题

    c. interrupt() 中断线程。该方法是在当前线程中打了一个停止的标记,并不是真正的停止线程。

    d. 异常法停止线程

          .....

          if(this.interrupted()){

              throw new InterruptedException(); 

          }

         .....后续程序

      如果不抛出异常后续程序还会继续执行

    e. return 停止线程

        同异常法,抛出异常的位置换成return(推荐使用异常法,将线程停止的异常抛出后,可以是线程停止的事件得到传播)

9. suspend() resume() 的缺点

    他们用于控制线程的暂停与恢复

    缺点:

           a. 独占

               线程调用公共类的同步方法时,将线程停止(调用suspend()),该线程不会释放同步锁,即单独占用该同步方法

           b. 不同步

               同时使用这两个方法暂停并恢复线程,会出现数据的不同步问题(线程A对某对象属性赋值或修改时,A对该对象的x属性进行了操作,经过暂停恢复操作之后,再对y属性操作,会导致x y 的值与你设置的值不相符)

10. yield() : 当前线程放弃cpu资源,让给其他线程,但放弃cpu资源的时间不能确定

11. 线程的优先级   :   thread.setPriority(int num)  0 - 10

12. 守护线程  thread.setDeamon(true);

      线程分为:用户线程 ; 守护线程【GC】

     

你可能感兴趣的:(多线程---API部分)