synchronized
package com.thread;
public class synchronizedTest {
private volatile static int count = 10;
/*
* 锁代表synchronized(synchronizedTest.class)
* */
public synchronized static void staticTestSy() {
}
private static void TStaticBy() {
synchronized (synchronizedTest.class) {
count--;
}
}
/*
* 锁代表synchronized(this) or this对象
* */
public synchronized void TestSy() {
}
private void Tby() {
synchronized (this) {
count--;
}
}
}
volatile
作用有2:
1、保证线程可见性
2、房子指令重排序
Atomic
LongAdder
JUC包
reentrantlock
CAS 无锁操作,可以定义公平锁,非公平锁。
CountDownLatch
CyclicBarrier
Phaser
ReadWriteLock-StampedLock
SeamPhore
ExChanger
LockSupport
LockSupport .unpark() 可以先与 LockSuppor.park()执行。
public class LockSupporTest {
public static void main(String[] args) {
Thread t= new Thread(()->{
for (int i = 0; i < 10; i++) {
if (i==5){
LockSupport.park();
}
System.out.println(i);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
try {
TimeUnit.SECONDS.sleep(8);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("88888888888888888888");
LockSupport.unpark(t);
}
}