【Thread】スレッド同時解決synchronized
1816 ワード
(二)ConcurrentThread
1.実際には、10の窓口でチケットを販売し、同時に安全性の問題があり、1枚のチケットを2人に売ることはできません
2.電子商取引では、10個の携帯電話が50個売れ、50人に奪われた
3.スレッド同期(ロック)
列車のトイレ、トイレは資源を共有して、トイレに行く人は同時のスレッドで、トイレは100回しか嘘をつくことができません
4.スレッド同時セキュリティの問題に対して、同期ロックを使用する必要があります.つまり、共有リソースは同時に1つのスレッドしかアクセスできません.
5.共有リソース同期ロックコードブロック
synchronized(ロックオブジェクト){
共有リソースコードの操作
}
6.同期コードの追加先
(1)コードが複数のスレッドによってアクセスされる
(2)コードに共有されたデータがある
(3)共有データが複数の文で操作される
コード:SaleTicket_synchronized
コード:Main_synchronized
1.実際には、10の窓口でチケットを販売し、同時に安全性の問題があり、1枚のチケットを2人に売ることはできません
2.電子商取引では、10個の携帯電話が50個売れ、50人に奪われた
3.スレッド同期(ロック)
列車のトイレ、トイレは資源を共有して、トイレに行く人は同時のスレッドで、トイレは100回しか嘘をつくことができません
4.スレッド同時セキュリティの問題に対して、同期ロックを使用する必要があります.つまり、共有リソースは同時に1つのスレッドしかアクセスできません.
5.共有リソース同期ロックコードブロック
synchronized(ロックオブジェクト){
共有リソースコードの操作
}
6.同期コードの追加先
(1)コードが複数のスレッドによってアクセスされる
(2)コードに共有されたデータがある
(3)共有データが複数の文で操作される
コード:SaleTicket_synchronized
public class SaleTicket_synchronized extends Thread{
private static int ticket=100;
private String windowname;
// 3.
private static Object obj=new Object();
// 1. ,
public SaleTicket_synchronized(String windowname) {
super(windowname);
this.windowname=windowname;
}
// 2. run
@Override
public void run() {
while(true) {
// 4.
synchronized (obj) {
if(ticket>0) {
// try {
// Thread.sleep(10);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println(this.getName()+" : "+ticket+" ");
ticket=ticket-1;
}else {
System.out.println(this.getName()+" : ");
break;
}
}
}
}
}
コード:Main_synchronized
public class Main_synchronized {
/**
*
* 4 , 100
* */
public static void main(String[] args) {
// 5. SaleTicket
SaleTicket_synchronized st1=new SaleTicket_synchronized(" 1");
st1.start();
SaleTicket_synchronized st2=new SaleTicket_synchronized(" 2");
st2.start();
SaleTicket_synchronized st3=new SaleTicket_synchronized(" 3");
st3.start();
SaleTicket_synchronized st4=new SaleTicket_synchronized(" 4");
st4.start();
}
}