1、创建线程的三个方法
①继承Thread类,重写run方法,调用start()开启
②实现Runnable接口,并实现该接口的run()方法.一般推荐使用
②实现Callable接口,重写call()方法
2.同步的使用
①一般使用的是synchronized
可以使用wait()进行阻塞线程
然后通过notify()方法解除阻塞状态
②但是也可以使用可重入锁ReentrantLock
具体代码:
Lock mLock=new ReentrantLock();
。。。。
mLock.lock();
try{
。。。
}finally{
mLock.unlock();
}
对于ReentrantLock,可以使用newCondition()获取条件对象,然后调用wait()方法。这样就使当前线程阻塞并且放弃锁。直到调用了signalAll()后才能激活因为这一条件而等待的所有线程。
3.阻塞队列的使用
BlockingQueue核心方法
添加数据:
offer()
put()
获取数据:
poll()
take()
drainTo()
java中的阻塞队列
ArrayBlockingQueue: 可以设置容量
LinkedBlockingQueue:如果队列一直增加可能会大量消耗内存
PriorityBlockingQueue:支持优先级
DelayQueue:支持延时
SynchronousQueue:无容量
LinkedTransferQueue:
LinkedBlockingDeque:双向队列