客户端加锁

来源:互联网 发布:数据库迷糊查询 编辑:程序博客网 时间: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) {    }    }}

原创粉丝点击