常用命令
jps:列出所有正在运行的java进程,其中jps命令也是一个java程序,前面的数字就是对应的进程id。
jstack PID 查看某个进程的所有线程状态
jconsole 查看某java进程中线程运行状态cmd中
Linux中
ps [options] [–help]
ps -ef 当前所有的进程。
A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
start()重复调用会报错IllegalThreadStateException
判断是否线程被打断了
Thread.currentThread().isInterrupted()
守护线程
只要其他非守护线程都结束了,守护线程就算没执行完都会强制结束
setDaemon(True)
竞态条件
一段代码块中如果存在对共享资源的多线程读写操作,该代码块为临界区
多个线程在临界区内执行,由于代码的执行顺序不同而导致结果无法预测,则发生了竞态条件
Synchronizated
不公平锁
synchronizated(对象){
临界区
}
ReemtramtLock
reentrantLock.lock();
try{
//临界区
}finally{
//释放锁
reentrantLock.unlock();
}
1.可重入性
reentrantLock.lock();
try{
//临界区再次重复加锁
}finally{
//释放锁
reentrantLock.unlock();
}
2.可打断避免死锁
reentrantLock.lockInterruptibly();
如果有竞争则不执行,被打断了可以执行
3.锁超时
获取不到锁就不等待
reentrantLock.tryLock(timeout)
4.公平锁
先进入线程先使用锁
同步控制
await signal
await前需要获得锁
await执行释放锁,进入conditionObject等待
await被唤醒后重新竞争lock锁
wait notify
Thread t1=new Thread(()->{
synchronized (lock){
while (!f){
try {
lock.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
log.debug("t1");
}
});
Thread t2=new Thread(()->{
synchronized (lock){
f=true;
lock.notify();
log.debug("t2");
}
});
LockSupport.park()//将当前线程停下来
LockSupport.unpark(thread)//唤醒thread线程
JMM——Java内存模型
1.可见性
volatile 易变关键字
修饰变量,避免线程从自己的工作缓存中寻找变量的值,必须到主存中获取
多线程中,一个线程保证volatile变量修改对另一个线程可见,却不保证原子性
2.原子性
线程池 ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}
addWorker 这个方法主要用来创建新的工作线程
execute()方法用于提交不需要返回值的任务,所以无法判断任务是否被线程池执行成功与否
submit()方法用于提交需要返回值的任务。
shutdown() :关闭线程池,线程池的状态变为 SHUTDOWN。线程池不再接受新任务了,但是队列里的任务得执行完毕。
FixedThreadPool 被称为可重用固定线程数的线程池。
SingleThreadExecutor 是只有一个线程的线程池。
CachedThreadPool 是一个会根据需要创建新线程的线程池。
CAS
compare and swap比较和交换
替换内存中某个位置的值时,先查看内存中的值是否与预期一致
compareAndSet() 原子操作
使用AtomicInteger等类型
JUC
AQS
AbstractQueuedSynchronized 是阻塞式锁和相关的同步器工具的框架
state表示资源状态-独占模式和共享模式
reentrantLock
读写锁
线程安全集合类
Hashtable,Vector 使用synchronized修饰方法
SynchonizedMap,SynchonizedList
JUC安全合集,Blocking类,Concurrent类,CopyOnWrite类