国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

線程安全 synchronize關(guān)鍵字

2019-11-11 00:09:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
1,同步塊        synchronized(監(jiān)視器){方法塊}

任何對(duì)象可以充當(dāng)監(jiān)視器。但前提得是同一個(gè)對(duì)象。

public class SaleTicket extends Thread{	PRivate static int ticket=100;//	private static Object obj = new Object();	@Override	public void run(){		while(true){				try {					Thread.currentThread().sleep(10);				} catch (InterruptedException e) {					// TODO Auto-generated catch block					e.printStackTrace();				}				show();			}		}	public void show(){		synchronized(this){			if(ticket>0){				System.out.println(ticket--);			}		}	}	public static void main(String[] args){		SaleTicket s1 = new SaleTicket();		s1.start();		SaleTicket s2 = new SaleTicket();		s2.start();		SaleTicket s3 = new SaleTicket();		s3.start();			}	}上面代碼,this充當(dāng)監(jiān)視器,由于三個(gè)Thread對(duì)象,所以三個(gè)this不一樣,起不到同步的效果。如果將this換成靜態(tài)Object,那么同步起作用。

public class SaleTicket2 implements Runnable {	private int ticket =100;	private Object obj = new Object();	@Override	public void run() {		while(true){			//			synchronized (this) {				try {					Thread.currentThread().sleep(10);				} catch (InterruptedException e) {					e.printStackTrace();				}				show();//			}		}	}	public void show(){		synchronized(obj){			if (ticket > 0) {				System.out.println(ticket--);			}		}			}	public static void main(String[] main){		Runnable t = new SaleTicket2();		Thread t1 = new Thread(t);		Thread t2 = new Thread(t);		Thread t3 = new Thread(t);		t1.start();		t2.start();		t3.start();	}}此代碼中,只是有一個(gè)Runnable實(shí)例,所以ticket和obj都是共享的,synchronized(this)和synchronize(obj)都能夠起到同步效果。因?yàn)槭蔷€程共享對(duì)象。2、同步方法  public synchronize 返回值 方法名(){}同步方法默認(rèn)監(jiān)視器是當(dāng)前對(duì)象this,

public class SaleTicket extends Thread{	private static int ticket=100;	private static Object obj = new Object();	@Override	public void run(){		while(true){				try {					Thread.currentThread().sleep(10);				} catch (InterruptedException e) {					// TODO Auto-generated catch block					e.printStackTrace();				}				show();			}		}	public synchronized void show(){//		synchronized(obj){			if(ticket>0){				System.out.println(ticket--);//			}		}	}	public static void main(String[] args){		SaleTicket s1 = new SaleTicket();		s1.start();		SaleTicket s2 = new SaleTicket();		s2.start();		SaleTicket s3 = new SaleTicket();		s3.start();			}	}上面代碼中,因?yàn)閚ew了3個(gè)對(duì)象,this不同,同步不起作用。這就體現(xiàn)了單例模式的重要性。下面代碼同步起作用,因?yàn)橹挥幸粋€(gè)Runnable對(duì)象,this相同。

public class SaleTicket2 implements Runnable {	private int ticket =100;	private Object obj = new Object();	@Override	public void run() {		while(true){			//			synchronized (this) {				try {					Thread.currentThread().sleep(10);				} catch (InterruptedException e) {					e.printStackTrace();				}				show();//			}		}	}	public synchronized void show(){//		synchronized(obj){			if (ticket > 0) {				System.out.println(ticket--);			}//		}			}	public static void main(String[] main){		Runnable t = new SaleTicket2();		Thread t1 = new Thread(t);		Thread t2 = new Thread(t);		Thread t3 = new Thread(t);		t1.start();		t2.start();		t3.start();	}}


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 文化| 靖远县| 章丘市| 卓资县| 江安县| 繁昌县| 平顶山市| 卢龙县| 公安县| 文成县| 雅安市| 靖边县| 固镇县| 乐亭县| 关岭| 吉首市| 天等县| 株洲市| 原阳县| 泸西县| 宜章县| 南阳市| 旬阳县| 延庆县| 宜昌市| 延安市| 莱州市| 承德县| 泗阳县| 若尔盖县| 建水县| 灵山县| 礼泉县| 定日县| 连南| 呼伦贝尔市| 湟源县| 扎赉特旗| 大新县| 龙山县| 贵阳市|