public class TestLock {
public static void main(String[] args) throws Exception {
MyList2 list = new MyList2();
Thread t1 = new Thread(new Runnable(){
public void run(){
list.add("C");
}
});
Thread t2 = new Thread(new Runnable(){
public void run(){
list.add("D");
}
});
t1.start();
t2.start();
t1.join();
t2.join();
list.add("E");
list.print();
}
}
class MyList2{
String[] data = {"A","B","","","",""};
int index = 2;
Lock lock = new ReentrantLock(); //建立Lock對象 控制多線程同步的鎖
public void add(String s){
try{
//synchronized 的壞處 死鎖問題 線程死等
lock.lock(); //上鎖 對鎖對象調用lock方法 進入同步代碼塊
//lock.tryLock(); //嘗試拿鎖 提高并發效率 不會阻塞線程 傳回值true/false
//lock.tryLock(long time,TimeUnit unit); //給線程一個等待的時間
data[index] = s ;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
index++;
}
finally{
lock.unlock(); //解鎖 對鎖對象調用unlock方法 離開同步代碼塊
}
}
public void print(){
for(int i = 0 ; i < data.length ; i++){
System.out.println(data[i]);
}
}
}
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxI1MihGeyIWMkdVYoJ1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxMzN4ATNyQTMzADOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
這輩子堅持與不堅持都不可怕,怕的是獨自走在堅持的道路上!!!