java线程基础备忘

t.interrupt(): 中断线程t.
synchronized(o){o.wait()}: 自已放弃CPU等待o.notify().
synchronized(o){o.notify()}: 通知o.wait()的线程你可以运行了。如果这样的线程有多个,则选一个。notifyAll()将通知所有的。
注意以上都在synchronized内,因为wait, notify都必须自己的线程是the own the o's monitor,就是说必须在synchronized(o)内。

以上只能等待一个条件,若要多个条件可用lock.newCondition。

threadPool主要有fixed和cache, cache是0,max,synQueue就是说这个queue其实永远不放东西直接进pool。而fixed是n,n,blockQueue就是说task都先进pool满n后进queue,queue也满了就reject. reject policy是可以设的。
更通常的情况是n,m,t,blockQueue就是task先进pool超过n后进queue满后corepoolsize从n开始往上加直到m,再有task就reject policy. t是等待时间,task超过n的线程们等待t后结束。
其它的如singleThread是n=1的fixed特例。还有scheduled等。

可以用Semaphore信号量控制临界资源,CyclicBarrier等待n个线程结束,CountDownLatch倒计数等。

你可能感兴趣的:(java,thread,concurrency)