1.Thread.yield 对线程调度一个建议,让出CPU
2.shutdown()方法的调用可以防止新任务被提交给这个Executor
3.可以返回结果的线程
实现Callable接口的call()方法,ExecutorService调用submit()方法执行。返回一个Future对象。
Future调用isDown()检查是否调用完。
Future调用get()得到返回结果,若没有执行完,将一直阻塞。
4.后台线程
当所有非后台线程结束时,后台线程也就结束了。
如果是设置线程池为后台线程,重写ThreadFactory接口,
后台线程结束时不会调用finally方法,突然中止。
5.捕获线程抛出的异常。
实现Thread.UncaughtExceptionHandler接口的UncaughtExceptionHandler的方法。
调用thread的setUncaughtExceptionHandler方法。
6. synchronized 获取的锁,在方法抛出异常的时候会自动解锁
7.使用Lock对象加锁。
lock.lock;
try{
dosomething()
} finallu{
lock.unlock();
}
trylock(时间,时间单位)尝试去获取锁。
8.原子类
AtomicInteger AtomicLong AtomicReference
9.调用wait
线程执行被挂起,对象上的锁被释放
10.只能在同步控制方法和同步控制块里调用wait(),notify(),notifyAll();如果在非同步块里调用,程序能通过编译,但运行的时候,将抛出异常。
11.同步队列
BlockingQuery LinkedBlockingQuery
ArrayBlockingQuery
12.interrupt
如果一个线程已经被阻塞,或者执行一个阻塞的任务,那么设置的这个线程的中断状态将抛出InterruptedException。
Interrupted可以用来检查中断状态。
13. holdsLock()可以用来检查当前线程是否持有锁。
14.await() signal()
15.同步器
CountDownLatch
可以向CountDownLatch对象设置一个初始计数器,任何在这个对象上调用wait的方法都将被阻塞,直到这个计数器为0,
其他任务在结束其工作时,可以调用该对象上的countDown来减少这个计数器。
CountDownLatch只能被触发一次,计数器不能被重置。
CyclicBarrier
作用和CountDownLatch一样,计数器可以被重置。
Exchanger
用于两个线程之间交换数据,
当你调用exchanger()方法时,他将阻塞直至对方任务调用exchanger()方法时。
ScheduleExecutor
定时操作
网友评论