客户端加锁
来源:互联网 发布:数据库迷糊查询 编辑:程序博客网 时间:2024/05/16 09:57
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) { } }}