Thread[
interrupt():向线程发送中断请求,如果当前线程被一个sleep调用阻塞,则抛出InterruptedException异常
static interrupted():检测当前线程是否被中断,并且清除中断状态
isinterrupted():检测是否存在线程被中断
void join():终止指定线程
]
Lock bankLock = new ReentrantLock() //定义锁对象。用来实现同步。
Lock[
lock()锁住其下的代码块,直至调用unlock方法
newCondition():返回一个与锁相关的条件对象Condition
]
Condition[
await():将线程放到条件的等待集中
signalAll():接触该条件的等待集中的所有线程的阻塞状态(一般使用这个)
signal():从该条件的等待集中随机的选择一个线程解除阻塞状态
]
Object[
notifyAll():解除那些在该对象上调用wait方法的线程的阻塞状态,该方法只能在同步方法或同步块内部调用。如果当前线程不是对象锁的持有者,该方法抛出一个IllegalMonitorStateException异常
notify()随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在一个同步方法或者同步块中调用,如果当前线程不是对象锁的持有者,该方法抛出一个IllegalMonitorStateException异常
wait():导致线程进入等待状态直到被通知,该方法只能在一个同步方法中调用,如果当前线程不是对象所的持有者,该方法抛出一个IllegalMonitorStateException异常
(面试题:能唤醒wait的只有notify方法:错)
]
BlockingQueue(子类:ArrayBlockingQueue,LinkedBlockingQueue)[
offer():增加一个元素,队列满返回false
poll():删除一个元素,队列空返回null
peek():查询队头元素,队列空返回null
put():增加元素,满阻塞
take():移除并返回队头元素,空则阻塞
]
线程安全 juc[
HashMap线程不安全,HashTable线程安全效率低,用ConcurrentHashMap代替
]
Callable 等价于Runnable[
call():等价于run()
]
Callable和Future从文件夹中所有文件中匹配关键字执行步骤[
List<Future> results = new ArrayList<>();
for (File file : files){
if (file.isDirectory()){
MatchCounter counter = new MatchCounter(file,keyword);
FutureTask task = new FutureTask<>(counter);
results.add(task);
Thread t = new Thread(task);
t.start();
}else if (search(file))count++;
}
for (Future result : results){
try {
count += result.get();
} catch (ExecutionException e){
e.printStackTrace();
}
}
]
执行器,线程池[
ExecutorService pool = Executors.newCachedThreadPool();
MatchCounter counter = new MatchCounter(new File(directory),keyword,pool);(其中MatchCounter implements Callable)
Future result = poll.submit(counter);
]