JDK 线程池
Executors.newCachedThreadPool(); //带缓存的 不够时自动添加
Executors.newSingleThreadExecutor(); //单个线程池 线程死掉后自动创建
Executors.newFixedThreadPool(10); //创建容纳N个线程的
Executors.newScheduledThreadPool(19); //创建定时器线程池
executo() 无返回结果
submit() 有返回结果的线程
Callable: //可返还结果的线程
ExecutorService threadpol = Executors.newSingleThreadExecutor();
Future<String> future = threadpol.submit(
new Callable<String>(){
public String call(){
return "aaaa";
}
}
system.out.print(Future.get());
);
Lock lock = new ReentrantLock(); //lock 对象
Condition condition = lock.newCondition(); // 条件. 通讯对象
condition.await(); //不是 object的 wait
condition.signal(); //唤醒
try{
lock.lock();
...
}finally{
lock.unLock();
}
ReentrantReadWriteLock rwl = ReentrantReadWriteLock(); //文件锁
rwl.readLock().lock();
rwl.writeLock().lock();
条件等待尽量使用while(){
}
多线程关键字
Executors.newCachedThreadPool(); //带缓存的 不够时自动添加
Executors.newSingleThreadExecutor(); //单个线程池 死掉后再创建
Executors.newFixedThreadPool(10); //创建容纳N个线程的
Executors.newScheduledThreadPool(19); //创建定时器线程池
Lock lock = new ReentrantLock(); //lock 互斥锁 对象
Condition condition = lock.newCondition(); // 条件. 通讯对象
Condition //条件锁
Semaphore //信号量 类似执行授权 (最多有3个人可以走)
CyclicBarrier //类似集合点 (必须3个人同时到才能走)
CountDownLatch //计数器 计时器效果 某时间点同时执行 CountDownLath a = new CountDownLath(1); a.await(); a.countDown();
Exchanger //数据交换 Exchanger a = new Exchanger()//放主线程; a.exchange("asd")
ArrayBlockingQueue //阻塞队列 ArrayBlockingQueue 啊 = new ArrayBlockingQueue(); a.put(1);//阻塞 a.add(1); //a.tack(); 获取
作者“光头的专栏”