java中解决脏读_java并发编程学习之脏读代码示例及处理
使用interrupt()中斷線程 ? ??當一個線程運行時,另一個線程可以調用對應的Thread對象的interrupt()方法來中斷它,該方法只是在目標線程中設置一個標志,表示它已經被中斷,并立即返回。這里需要注意的是,如果只是單純的調用interrupt()方法,線程并沒
public class Thread10 {
public static void main(String[] args) {
Thread10_Entity entity = new Thread10_Entity();
Thread10_1 t10_1 = new Thread10_1(entity);
t10_1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(entity.get());
}
}
class Thread10_1 extends Thread {
private Thread10_Entity thread10_Entity;
public Thread10_1(Thread10_Entity t10) {
this.thread10_Entity = t10;
}
@Override
public void run() {
thread10_Entity.set("admin", "admin");
}
}
class Thread10_Entity {
private String username = "user";
private String password = "user";
synchronized void set(String username, String password) {
this.username = username;
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.password = password;
}
String get() {
return username + " " + password;
}
}
運行結果:admin userExecutor框架簡介 ? ??在Java 5之后,并發編程引入了一堆新的啟動、調度和管理線程的API。Executor框架便是Java 5中引入的,其內部使用了線程池機制,它在java.util.cocurrent 包下,通過該框架來控制線程的啟動、執行和關閉,可以簡化并發編程的操作。因此,
加上sleep只是為了放大錯誤,便于觀察。
有任何疑問歡迎留言或者加企鵝群(282034885)討論
那么如何避免臟讀呢?上篇文章(java并發編程學習之一段簡單代碼證明synchronized鎖的是對象)中提到過,synchronized鎖的是對象,這里就可以用上了。
在get方法上加上synchronized關鍵字即可,在set沒處理完之前,對對象加鎖,避免其他線程進行臟讀。
總結
以上是生活随笔為你收集整理的java中解决脏读_java并发编程学习之脏读代码示例及处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: graphpad 折线图横坐标比例_Gr
- 下一篇: return view前端怎么获取_前端