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。