Thread

1、java有10个优先级,xp有7个,solaris则有2的31次幂个。一般建议不设置优先级,如果设置优先级的话,建议设置

Thread.MAX_PRIORITY;
Thread.MIN_PRIORITY;
Thread.NORM_PRIORITY;这三个优先级

1、任意时刻可以调用Thread.setPriority()来设置线程的优先级,会影响线程的调度频率。

2、Thread.getPriority()

3、线程之间异常是不能扩散的,当一个线程最后没有捕获异常,线程扩散到run()之后该线程就结束了。所以需要设置一个线程处理器来进行回收资源。

    线程调用异常handler的顺序是这样的:1、本线程的异常处理器  2、如果1没有调线程所在组的异常处理器  3、2没有的话调用Thread的default异常处理器。

4、Thread.isDeamon(),Thread.setDeamon()   守护线程,当非守护线程都结束的时候,守护线程自动结束。

    后台线程显示创建的所有线程默认都是daemon线程。而且daemon的run没有必要执行finally子句就会结束。

   当非daemon线程全部结束完成之后,daemon线程会立刻终止,不执行finally子句。

5、Thread.isAlive判断线程是否结束

6、Thread.join()等待线程结束,也就是isAlive()返回false本线程才继续。

      Thread.join(时间)

      可以被中断

7、Thread.yield()建议调度下一个线程

8、不要过多的追究线程组,不值得。

9、一般将属性设置为private。

10、synchronized加在方法上面实际上给this加的锁,注意,一个线程可以不断的获得一个锁,只要本线程已经获得了锁,然后再请求的时候还是能获得,JVM会对锁进行计数。

11、class对象也能加锁,是通过在static方法上加synchorized。

12、ReentrantLock能提供更细粒度的锁操作方式,同时提供了很多的特性,如设置加锁的时间,设置可被中断。一般不使用Lock,直接使用synchorized,在性能调优的时候才使用Lock。

 

posted @ 2016-02-27 11:57  YDDMAX  阅读(233)  评论(0编辑  收藏  举报