java多线程安全解决方案_java常用知识:多线程安全问题的解决方法-Lock锁
jdk1.5后出現的
兩個方法:
void Lock()
void unlock()
使用步驟:
1.在成員位置創建一個ReentrantLock對象
2.在可能出現安全問題的代碼前調用Lock接口中的方法Lock獲取鎖
3.在可能出現安全問題的代碼后調用Lock接口中的方法unlock釋放鎖
第一種寫法
package xuexi.heima.ThreadSafe;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class RunnableImpl2 implements Runnable {
private static int ticket = 100;
Lock l = new ReentrantLock();
@Override
public void run() {
while(true){
l.lock();
if(ticket>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在賣第"+ticket+"張票;");
ticket--;
}
l.unlock();
}
}
}
第二種寫法(推薦,這樣無論是否報錯都會施放lock鎖)
package xuexi.heima.ThreadSafe;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class RunnableImpl2 implements Runnable {
private static int ticket = 100;
Lock l = new ReentrantLock();
@Override
public void run() {
while(true){
l.lock();
if(ticket>0){
try {
Thread.sleep(10);
System.out.println(Thread.currentThread().getName()+"正在賣第"+ticket+"張票;");
ticket--;
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
l.unlock();
}
}
}
}
}
分享到:
總結
以上是生活随笔為你收集整理的java多线程安全解决方案_java常用知识:多线程安全问题的解决方法-Lock锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java字符类的英文表示_java 字符
- 下一篇: Understand Lambda Ex