【读书笔记】Java 线程

               这篇作为 Android 线程和线程池一文的辅佐,

           先介绍一下 Java 线程的一些概念

   一、一些概念

              一个程序同时执行多个任务,通常每一个任务成为一个线程(Thread), 它是线程控制的简称;

             可以同时运行一个以上的程序成为多线程程序(multithreaded);

             如果需要执行一个耗时的任务,应该使用独立的线程;

    二、单独一个线程执行一个任务的简单过程

          1、将任务代码移到实现了 Runnable 接口的类的 run 方法中

          接口  

public  interface Runnable{
        void run();
    }
       实现类

   class MyRunnable implements Runnable{

        @Override
        public void run() {
            // task code
        }
    }
      

       2、创建一个类对象

          Runnable r = new MyRunnable();

      3、由 Runable 创建一个 Thread 对象

        Thread t = new Thread(r);

      4、启动线程

       t.start();


   三、线程的中断

        调用 interrupt 请求终止线程;

        当对一个线程调用 interrupt 方法时,线程的中断状态将被置位。这是每一个线程都具有的 boolean 标志。每个线程都应该不时检查这个标志,以判断线程是否被中断。

         例       

 while (!Thread.currentThread().isInterrupted()){
            // do more work
        }
    

 四、线程的状态

         可以调用 Thread.getState() 方法得到;

         线程的状态分:

         NEW 该线程还没有开始进行;

         RUNNABLE  一旦调用了 start 方法, 线程处于 runnable 状态。既可运行状态,一个可运行的线程可能正在运行也可能没有运行;

         BLOCKED 被阻塞;

         WAITING  等待;

         TIMED_WATING / TERMINATED 被终止状态

                  终止的原因:

                       1、因为 run 方法正常退出而被终止;

                       2、因为一个没有捕获的的异常而终止 run 方法二意外死亡。


五、线程优先级

      通过 setPriority 方法可设置

      默认情况下,一个线程继承它父线程的优先级;

      可分:

           MIN_PRORITY   在 thread 类中定义为 1;

           NORM_PRORITY 在 thread 类中定义为 5;

           MAX_PRORITY  在 thread 类中定义为 10;


六、阻塞队列(blocking queue)

        对于许多线程问题,可以通过一个或多个队列以优雅且安全的方式将其形式化;

        使用队列,可以安全地从一个线程向另一个线程传递数据;

        当试图向队列添加元素,而队列已满或是想从队列移出元素,而队列为空的时候。阻塞队列导致线程阻塞。在协调多个线程之间的合作时,阻塞队列是一个有用的工具。


         阻塞队列方法分三类

      1、如果将队列当作线程管理工具来使用,会用到put 和 take 方法;

      2、当试图向满的队列添加或从空的队列中移出元素时,add、 remove 、element 操作会抛出异常;

      3、在一个多线程程序中,队列会在任何时候空或满, 因此一定要使用 offer、 poll 和 peek 方法替代。这些方法如果不能完成任务。只是给出一个错误提示而不是抛出异常。



          

 









你可能感兴趣的:(java,线程,读书笔记)