package first;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ClientLock {
static List<Integer> list = Collections.synchronizedList(new ArrayList<Integer>());
public static boolean putIfNot(int i) {
boolean yes ;
synchronized(list) { // 这里要加同一把锁,如果直接synchronized 方法的话,它的锁就是 this,则与list中的不是同一把锁,则不再是线程不安全的了
yes = list.contains(i);
if(yes) {
System.out.println("failed");
return false;// yes = ture,add failed
}
list.add(i);
System.out.println("success");
System.out.println("添加线程sleep");
sleep(TimeUnit.SECONDS,2);
System.out.println("添加线程复活");
return true;// add succeess;
}
}
public static void main(String args[]) {
Thread reader = new Thread(new Runnable() {
@Override
public void run() {
putIfNot(1);
}
});
reader.start();
sleep(TimeUnit.SECONDS,1);// let reader first;
System.out.println("主线程复活");
putIfNot(1);
System.out.println(list.size());
}
public static void sleep(TimeUnit time,int i) {
try{
time.sleep(i);
}catch(InterruptedException e) {
}
}
}
客户端加锁
最新推荐文章于 2021-12-24 11:41:11 发布