线程管理
1,线程的创建、管理
调用 start() 方法时线程开始运行
- 继承 Thread 类,覆盖 run() 方法
- 实现 Runnable 接口,使用带参数的 Thread 构造器创建 Thread
线程有 Id,Name,Priority和State几个属性
interrupt() 用来中断线程,可以用 isInterrupted() 来进行判断。 有 InterruptedException 异常
join() 用来等待线程
守护线程用 setDaemon() 在start() 之前设置
因为 run() 方法不支持 throws 语句,所以异常首先被检查是否设置了当前线程默认的未捕获异常处理器,然后是当前组的异常处理器,最后被打印并终止。 用 setUncaughtExceptionHandler 设置默认处理器。线程可以进行分组,在创建的时候传入 ThreadGroup 对象即可。
如果创建的对象是实现了Runnable接口的类的实例,并作为参数启动这些线程,则共享相同的属性。可以使用 ThreadLocal 接口定义匿名类,实现 initialValue 方法。然后在使用的时候使用 set/get 方法
最后,使用工厂类也可以创建线程 ThreadFactory,需要实现 newThread
2,同步和临界区基本概念
synchronized
Lock 接口: ReentrantLock/ReentrantReadWriteLock.ReadLock/WriteLock
3,资源同步辅助类
- Semaphore.acquire/release/tryAcquire
- CountDownLatch.await/countDown
- CyclicBarrier.await
- CountDownLatch 和 CyclicBarrier 还是不一样的, CyclicBarrier只有一个等待接口,等待其他线程然后继续执行,但是 CountDownLatch 可以只 countDown,不一定要继续执行
- Phaser.onArrive/arriveAndAwaitAvance/register/arriveAndDeregister
- Exchanger.exchange
浙公网安备 33010602011771号